参考以下代码:
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值相同。
非常感谢您的回复。
答案 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;