在不知道类成员创建从基类实例派生类实例
-
23-09-2019 - |
题
时,这种情况下甚至可能吗?
class Base
{
int someBaseMemer;
};
template<class T>
class Derived : public T
{
int someNonBaseMemer;
Derived(T* baseInstance);
};
目标:
Base* pBase = new Base();
pBase->someBaseMemer = 123; // Some value set
Derived<Base>* pDerived = new Derived<Base>(pBase);
pDerived-> someBaseMemer的值应该是equeal到pBase-> someBaseMember并与其他基体类似。
解决方案
你为什么不真正写完并编译的代码?
class Base
{
public: // add this
int someBaseMemer;
};
template<class T>
class Derived : public T
{
public: // add this
int someNonBaseMemer;
Derived(T* baseInstance)
: T(*baseInstance) // add this
{ return; } // add this
};
此编译和运行作为指定。
编辑:?还是你的意思是someNonBaseMemer
应该等于someBaseMemer
其他提示
为什么要导出,并在同一时间通过基指针?选择使用,没有什么可以阻止你从兼具。使用继承来为你做的工作:
class Base
{
public:
Base(int x) : someBaseMemer(x) {}
protected: // at least, otherwise, derived can't access this member
int someBaseMemer;
};
template<class T>
class Derived : public T
{
int someNonBaseMemer;
public:
Derived(int x, int y) : someNonBaseMemer(y), T(x) {}
};
Derived<Base> d(42, 32); // usage
虽然不是最好的选择,因为设计。
申报someBaseMemr
为公开或从class
改变声明struct
:
class Base
{
public:
int someBaseMemer;
};
OR
struct Base
{
int someBaseMemr;
};
记住,class
必须通过默认所有成员和方法private
访问。甲struct
默认提供public
访问。
此外,所有派生类应具有public
继承从Base
。
不隶属于 StackOverflow