要满足这种需求,我这边有三种方法。
第一种:父类有纯虚函数,子类没有纯虚函数。
但这种方法如果子类和父类都不需要多态特性,无疑是一种比较浪费的做法,因为这样做子类和父类都会带来多出一个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();
};