电脑故障

位置:IT落伍者 >> 电脑故障 >> 浏览文章

privte的析构函数和构造函数


发布日期:2018/11/26
 

C++中是不允许virtual 构造函数的如果在构造函数前加virtual

以vc为例编译器报错为inline is the only legal storage class for constructors

虽然不明白这个跟inline有什么关系但是错误是肯定的

构造函数和析构函数都可以是private的这种情况下编译通过但是该类无法被实例化即使继承也不行

例如

class A

{

private:

A();

virtual ~A();

};

class B : public A

{

public:

B();

virtual ~B();

};

B b;

以上代码是编译不通过的因为B() ~B()分别需要调用A()~A()而它们都是private的 所以无法调用

解决方法只有friend包括friend class和 friend function例如可以将A的定义修改如下就可以实现

class A

{

private:

A();

virtual ~A();

friend class B;

};

或者friend函数也可以在内部生成A的变量因为它可以调用A的私有构造函数和析构函数

上一篇:函数调用方式的区别[thiscall,

下一篇:求N阶行列式的值