如果一个类总是要继承,那么构造函数protected
是否有意义?
class Base
{
protected:
Base();
};
class Child : protected Base
{
public:
Child() : Base();
};
感谢。
答案 0 :(得分:10)
如果您不希望客户端创建Base
的实例,而只是您希望它是某些[派生]类的基类,和/或打算让它们被朋友使用,那么这才有意义Base
的{(见下面的例子)。记住protected
函数(和构造函数)只能从派生类和friend
类中调用。
class Sample;
class Base
{
friend class Sample;
protected:
Base() {}
};
class Sample
{
public:
Sample()
{
//invoking protected constructor
Base *p = new Base();
}
};
答案 1 :(得分:4)
如果它总是一个基础(“混合”),是的。请记住,具有纯虚函数的类将始终是基础,但您无需执行此操作,因为它无论如何都无法实例化。
另外,请给它a public virtual destructor or a protected non-virtual destructor。