现在的位置: 首页 > 综合 > 正文

父类不可以产生对象,而子类可以的设计方式

2013年08月05日 ⁄ 综合 ⁄ 共 483字 ⁄ 字号 评论关闭

要满足这种需求,我这边有三种方法。

第一种:父类有纯虚函数,子类没有纯虚函数。

但这种方法如果子类和父类都不需要多态特性,无疑是一种比较浪费的做法,因为这样做子类和父类都会带来多出一个vptable,占用四个字节。

 

第二种:把父类的构造函数设为保护的,子类是public派生来的。
class Base

{

public:

protected:
 
 Base()
 {
 }
 ~Base()
 {
 }
private:
};

class Derive : public Base

{

public:

 Derive()
 {
 }
 ~Derive()
 {
 }

protected:

private:

};

int main()

{
  Base obj;    //don't do like this
 Derive obj; //ok

}

第三种:把父类的构造函数设为私有的,子类为父类的友元类, 用模板继承来做
template<T>
class Base
{
friend T;
private:
Base();
~Base();
};
class Derived: public Base<Derived>
{
public:
Derived();

~Derived();
};

抱歉!评论已关闭.