这种情况甚至可能吗?
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-&gt; someBaseMemer的值应该是pBase-> someBaseMember的equeal,与其他基本成员类似。
答案 0 :(得分:4)
为什么要同时派生并传递基指针?选择其中之一,没有什么可以阻止你两者兼顾使用继承为您完成工作:
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
虽然不是设计中最好的选择。
答案 1 :(得分:3)
为什么你不能真正完成编写和编译代码?
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
?
答案 2 :(得分:1)
将someBaseMemr
声明为公开或将声明从class
更改为struct
:
class Base
{
public:
int someBaseMemer;
};
OR
struct Base
{
int someBaseMemr;
};
请记住,class
默认情况下private
具有struct
个所有成员和方法的访问权限。 public
默认提供public
访问权限。
此外,所有派生类都应该Base
继承{{1}}。