首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

抽象类构造函数有关问题

2012-08-14 
抽象类构造函数问题C/C++ codeenum Size{Mini, Medium, Full}class CVehicle{public:CVehicle(Size s M

抽象类构造函数问题

C/C++ code
enum Size{Mini, Medium, Full};class CVehicle{public:    CVehicle(Size s = Medium, int n = 0) : size(s), nSpotsNeeded(n) {}protected:    Size size;    int    nSpotsNeeded;};class CBus : public CVehicle{public:    CBus() : CVehicle(Full, 5) {}};


请问怎么在没其他虚函数的情况下把基类CVehicle声明为抽象类。。构造函数显然不能成为虚函数,还有其他办法么?是否把析构函数变纯虚?

这种没多态动作的继承是不是不好?

[解决办法]
可以。
不过注意对于析构函数,即便是纯虚函数,也需要定义,否则没法odr-use,用了链接错误。(普通纯虚成员函数的定义倒是可有可无。)

[解决办法]
C/C++ code
#include <iostream>using namespace std;enum Size{Mini, Medium, Full};class CVehicle{public:    CVehicle(Size s = Medium, int n = 0) : size(s), nSpotsNeeded(n) {}    virtual~CVehicle()=0;//完全可以把析构函数设置为纯虚函数,编译能够通过的。protected:    Size size;    int    nSpotsNeeded;};class CBus : public CVehicle{public:    CBus() : CVehicle(Full, 5) {}};void main(){}
[解决办法]
探讨
C/C++ code

enum Size{Mini, Medium, Full};
class CVehicle{
public:
CVehicle(Size s = Medium, int n = 0) : size(s), nSpotsNeeded(n) {}
protected:
Size size;
int nSpotsNeeded;
};

class ……

热点排行