如何为Base类中的结构成员设置在Derived类中保持不变的值

时间:2014-04-02 08:18:40

标签: c++

参考以下代码:

class Base
{   
public:
struct DataType
{
    public:
      long double var1;
      int begin;
      int stop;

      inline DataType() {}
      inline long double get_var1() {return this->var1;}    
      inline int get_begin() {return this->begin;}  
      inline int get_stop() {return this->stop;}

      inline void set_var1(long double var1) {this->var1=var1;} 
      inline void set_begin(int begin) {this->begin=begin;} 
      inline void set_stop(int stop) {this->stop=stop;}
};

inline Base() {}
virtual ~Base() {}  

protected:
virtual void funct()
{

}

void execute()
{
   // How can I set a value of begin here?
   funct(); 
   // How can I set a value of stop here?   
}
};

class Derived:public Base
{
    DataType dt;

    public:
    inline Derived() 
    {
    this->dt.set_var1(0.005);       
    }   
    inline ~Derived() {}

    protected:
    void funct();
};

void Derived::funct()
{
    //Some implementation
}    

除此之外,还有更多代码,Derived实例化并调用execute()。我想在这里做的是我想分别在调用funct()方法之前和之后在Base类的execute方法中设置begin和stop的值(如使用注释所示),这样每当我们创建一个对于Derived,对象是obj_derived,它在execute()内设置的begin和stop值相同。

非常感谢您的回复。

2 个答案:

答案 0 :(得分:1)

基类没有DataType类型的成员。它仅在Derived中定义。

您可以将dt的声明从Derived移至Base。它没有解决你的问题吗?

答案 1 :(得分:1)

Base班级定义中:

struct DataType{
...
} dt;    //now there is a member 'dt' of type 'struct DataType'

execute方法;

void execute()
{
   this->dt.set_begin(1);
   funct(); 
   this->dt.set_stop(1);
}

也在Derived类定义注释中:

//DataType dt;