初始化"嵌套" boost :: shared_ptr类成员

时间:2016-03-10 01:46:52

标签: c++ boost polymorphism shared-ptr

我正在尝试编写一个包含3个抽象类(Base_ABase_BBase_C)的C ++程序,并且每个类都有一个派生类(分别为{{ 1}},Derived_ADerived_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(应该是)。

我错过了什么?也许是关于类KDerived_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);
};

提前致谢。

1 个答案:

答案 0 :(得分:0)

我没有测试过这个答案。

您似乎在每个班级重新声明->。每个新声明都会屏蔽父类中的double K;

您不是从K开始K,而Base_A可能是Derived_B,而指针z->barCBase_B