设为首页 加入收藏

TOP

privte的析构函数和构造函数
2014-11-12 20:00:06 】 浏览:5561
Tags: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的私有构造函数和析构函数。


  编辑特别推荐:



  /*注释:


  第7行:c=a-- - b--*2;可用下列运算式表示:


  c=a-b*2; //c=5-7*2=14;


  a=a-2; //a=5-1=4;


  b=b-1; //b=7-1=6;


  第9行:c=--a*--b;可用下列运算式表示:


  a=a-1; //a=4-1=3;


  b=b-1; //b=6-1=5;


  c=a*b; //c=3*5=15;


  第11行:c=--a+b--/a;可用下列运算式表示:


  a=a-1; //a=3-1=2;


  c=a+b/a; //c=2+5/2=2+2=4;


  b=b-1;b=5-1=4;


  第13行:c=a++ + --b/a++;可用下列运算式表示:


  c=a++; //c=2,a=2+1=3;


  c=c+--b/a++;本式又可用下列算式表示:


  b=b-1; //b=4-1=3;


  c=c+b/a //c=2+3/3=3;


  a=a+1; //a=4


  */


  编辑特别推荐:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇利用循环打印一些形状(星号组成.. 下一篇计算机二级C++辅导:旋转锁

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目