FSF GCC merge 02/23/03
[official-gcc.git] / gcc / testsuite / g++.old-deja / g++.law / visibility7.C
blobec7947c5503d2997f9117ead2769cf0de841871f
1 // Build don't link: 
2 // GROUPS passed visibility
3 // visibility file
4 // From: Gordon Joly <G.Joly@cs.ucl.ac.uk>
5 // Date:     Wed, 21 Apr 93 09:42:07 +0100
6 // Subject:  /*** BUG REPORT : THE MYTH OF PRIVATE INHERITANCE ***/
7 // Message-ID: <9304210842.AA01815@life.ai.mit.edu>
8 #include <iostream>
10 class A {
11  private:
12   int number;
13  public:
14   A(int i) : number(i)
15     {}
16   virtual ~A()
17     {}
18   virtual void Number(int c)
19     { number = c; } // ERROR - private
20   virtual int Number()
21     { return number; } // ERROR - private
24 class B : private A {
25  private:
26   int second_number;
27  public:
28   B(int c, int i) : second_number(c), A(i)
29     {}
30   virtual ~B()
31     {}
33   virtual void firstNumber(int b)  // renames member function Number(int) of class A
34     { A::Number(b); }
35   virtual int firstNumber()  // renames member function Number() of class A
36     { return A::Number(); }
42 class C {
43  private:
44   B* bobject;
45  public:
46   C(B* bp) : bobject(bp)
47     {}
48   virtual ~C()
49     {}
50   //
51   // the following two functions access
52   // private member functions of class B
53   // and they should not be able to do so
54   //
55   virtual void setBValue(int i) 
56     { if (bobject) bobject->Number(i); }// ERROR - .*
57   virtual int getBValue()
58     { if (bobject) { return bobject->Number(); } return 0; }// ERROR - .*
62 int main()
64   B* bobject = new B(2, 1);
65   C* cobject = new C(bobject);
66   cobject->setBValue(8);
67   std::cout << cobject->getBValue() << std::endl;
68   delete bobject;
69   delete cobject;