假设我有这两个类
class base_size { public: int size() { return 5; } }; class base_implement { public: base_implement(int s) : _vec(s) { cout << "size : " << _vec.size() << endl; } private: vector<float> _vec; };
如果我继承这两者,那么在其他构造函数中调用其中一个类成员函数就可以了吗?例如
class derived : public base_implement,public base_size { public: derived() : base_size(),base_implement(size()) { // Is this OK? // If derived is not yet constructed can I access this->size() ? // Works in VC++. Not sure about other compilers. } };
解决方法
原则上没关系基础子对象和成员对象是在派生构造函数体运行之前构建的,因此您可以调用成员函数而没有任何问题.你甚至可以在构造函数中调用自己的成员函数;你只需要确保它们不依赖于在同一个构造函数中使用的任何东西.
只需确保以正确的顺序调用基本初始值设置,即它们的声明顺序和/或修正您的类定义:对于base_size :: size(),您希望base_size子对象被完全构造,所以它必须来第一.
class derived : base_size,base_implement { derived() : base_size(),base_implement(size()) { /* ... */ } // ... };