visibility7.c

来自「linux下编程用 编译软件」· C语言 代码 · 共 74 行

C
74
字号
// { dg-do assemble  }// GROUPS passed visibility// visibility file// From: Gordon Joly <G.Joly@cs.ucl.ac.uk>// Date:     Wed, 21 Apr 93 09:42:07 +0100// Subject:  /*** BUG REPORT : THE MYTH OF PRIVATE INHERITANCE ***/// Message-ID: <9304210842.AA01815@life.ai.mit.edu>#include <iostream>class A { private:  int number; public:  A(int i) : number(i)    {}  virtual ~A()    {}  virtual void Number(int c) // { dg-error "inaccessible" }    { number = c; }  virtual int Number() // { dg-error "inaccessible" }    { return number; }};class B : private A { private:  int second_number; public:  B(int c, int i) : second_number(c), A(i)    {}  virtual ~B()    {}  virtual void firstNumber(int b)  // renames member function Number(int) of class A    { A::Number(b); }  virtual int firstNumber()  // renames member function Number() of class A    { return A::Number(); }};class C { private:  B* bobject; public:  C(B* bp) : bobject(bp)    {}  virtual ~C()    {}  //  // the following two functions access  // private member functions of class B  // and they should not be able to do so  //  virtual void setBValue(int i)     { if (bobject) bobject->Number(i); } // { dg-error "this context|accessible base" }  virtual int getBValue()    { if (bobject) { return bobject->Number(); } return 0; } // { dg-error "this context|accessible base" }};int main(){  B* bobject = new B(2, 1);  C* cobject = new C(bobject);  cobject->setBValue(8);  std::cout << cobject->getBValue() << std::endl;  delete bobject;  delete cobject;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?