zoukankan      html  css  js  c++  java
  • privte的析构函数和构造函数

    C++中是不允许virtual 构造函数的,如果在构造函数前加virtual。
    以vc6为例,编译器报错为:'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的私有构造函数和析构函数。

    转自: http://blog.myspace.cn/e/400067551.htm

  • 相关阅读:
    图的理论基础
    哈夫曼树(三)之 Java详解
    哈夫曼树(二)之 C++详解
    哈夫曼树(一)之 C语言详解
    基数排序
    桶排序
    归并排序
    堆排序
    选择排序
    希尔排序
  • 原文地址:https://www.cnblogs.com/younes/p/1676044.html
Copyright © 2011-2022 走看看