我正在尝试编写一个包含3个抽象类(Base_A
,Base_B
和Base_C
)的C ++程序,并且每个类都有一个派生类(分别为{{ 1}},Derived_A
和Derived_B
)。
现在,我想创建Derived_C
的{{1}}对象(通过z
)。要初始化Derived_C
,我想使用boost::shared_ptr
(通过z
),这是y
的成员,并初始化boost::shared_ptr
我想使用{{} 1}}(通过Derived_B
),后者又是y
的成员。
我面临的问题是我想要检索属于x
类的成员boost::shared_ptr
的值,但是以下行
Derived_A
返回0.0而不是50.0(应该是)。
我错过了什么?也许是关于类K
和Derived_B
的构造函数中std::cout << z->barC->K << std::endl;
成员的初始化的事情?
以下是代码:
// ----- A.h -----
shared_ptr
// ----- A.cpp -----
Derived_B
// --------------------------------------------- ---------------------------------
// ----- B.h -----
Derived_C
// ----- B.cpp -----
class Base_A{
public:
double K;
Base_A(){};
Base_A(const double& _K);
virtual ~Base_A(){};
virtual double operator()(const double& _S) const = 0;
};
class Derived_A :public Base_A{
public:
double K;
Derived_A(const double& _K);
~Derived_A(){};
double operator()(const double& _S)const;
};
// --------------------------------------------- --------------------------------
// ----- C.h -----
Base_A::Base_A(const double& _K)
:K(_K){};
Derived_A::Derived_A(const double& _K)
:K(_K){};
double Derived_A::operator()(const double& _S) const {
return std::max(_S - K, 0.0);
}
// ----- C.cpp -----
class Base_B{
public:
double S;
double K;
boost::shared_ptr<Base_A> fooB;
Base_B(){};
virtual ~Base_B(){};
// other pure virtual functions...
};
class Derived_B :public Base_B{
public:
double S;
double K;
boost::shared_ptr<Derived_A> fooD;
Derived_B(const double& _K, boost::shared_ptr<Derived_A> _fooD);
~Derived_B(){};
// declaration of the pure virtual functions...
};
// --------------------------------------------- ---------------------------------
// ----- Main.cpp -----
Derived_B::Derived_B(const double& _K, boost::shared_ptr<Derived_A> _fooD)
:K(_K){
fooD = boost::shared_ptr<Derived_A>(_fooD);
};
提前致谢。
答案 0 :(得分:0)
我没有测试过这个答案。
您似乎在每个班级重新声明->
。每个新声明都会屏蔽父类中的double K;
。
您不是从K
开始K
,而Base_A
可能是Derived_B
,而指针z->barC
是Base_B
。