C++ 如何使派生 class 自动获取基本 class 参数
C++ How to make derived class to take base class parameters automatically
当我更改基 class 中的值,然后创建子 class 的对象时,子 class 使用空参数创建,而不是更改价值。
有没有一种方法可以使用基 class 的参数来对象派生 class?
示例:
Base.h
class Base
{
class Child;
public:
int number = 0;
Child *chilObject;
void Setup()
{
number = 5;
childObject = new Child;
}
};
Child.h
class Child :
public Base
{
};
主要
int main()
{
Base base;
base.Setup();
cout << base.number << " : " << base->chilObject.number << endl;
cout << << endl;
}
Output: 5 : 0
我只是问是否有办法让派生的 class 对象自动获取 Base class 变量。
这是 C++ 中的典型做法:
#include <iostream>
class Base
{
public:
int number = 0;
virtual ~Base() = default;
void Setup()
{
number = 5;
}
};
class Child : public Base
{
// number exists here because of inheritance.
};
int main()
{
// Child object seen as Base object:
Base* base = new Child;
base->Setup();
// Child object seen as Child object:
Child* child = static_cast< Child* >( base );
// Both share the same 'number' variable, so:
std::cout << base->number << " : " << child->number << std::endl;
std::cout << std::endl;
// Free memory taken by 'new'.
delete base;
return 0;
}
产量:
5 : 5
在实际代码中,您可能会将 Setup
设为虚拟而不进行转换。
当我更改基 class 中的值,然后创建子 class 的对象时,子 class 使用空参数创建,而不是更改价值。 有没有一种方法可以使用基 class 的参数来对象派生 class?
示例:
Base.h
class Base
{
class Child;
public:
int number = 0;
Child *chilObject;
void Setup()
{
number = 5;
childObject = new Child;
}
};
Child.h
class Child :
public Base
{
};
主要
int main()
{
Base base;
base.Setup();
cout << base.number << " : " << base->chilObject.number << endl;
cout << << endl;
}
Output: 5 : 0
我只是问是否有办法让派生的 class 对象自动获取 Base class 变量。
这是 C++ 中的典型做法:
#include <iostream>
class Base
{
public:
int number = 0;
virtual ~Base() = default;
void Setup()
{
number = 5;
}
};
class Child : public Base
{
// number exists here because of inheritance.
};
int main()
{
// Child object seen as Base object:
Base* base = new Child;
base->Setup();
// Child object seen as Child object:
Child* child = static_cast< Child* >( base );
// Both share the same 'number' variable, so:
std::cout << base->number << " : " << child->number << std::endl;
std::cout << std::endl;
// Free memory taken by 'new'.
delete base;
return 0;
}
产量:
5 : 5
在实际代码中,您可能会将 Setup
设为虚拟而不进行转换。