4495766362
From-SVN: r23760
72 lines
1.4 KiB
C
72 lines
1.4 KiB
C
// Build don't link:
|
|
// 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.h>
|
|
|
|
class A {
|
|
private:
|
|
int number;
|
|
public:
|
|
A(int i) : number(i)
|
|
{}
|
|
virtual ~A()
|
|
{}
|
|
virtual void Number(int c)
|
|
{ number = c; } // ERROR - private
|
|
virtual int Number()
|
|
{ return number; } // ERROR - private
|
|
};
|
|
|
|
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); }// ERROR - .*
|
|
virtual int getBValue()
|
|
{ if (bobject) { return bobject->Number(); } return 0; }// ERROR - .*
|
|
};
|
|
|
|
|
|
int main()
|
|
{
|
|
B* bobject = new B(2, 1);
|
|
C* cobject = new C(bobject);
|
|
cobject->setBValue(8);
|
|
cout << cobject->getBValue() << endl;
|
|
delete bobject;
|
|
delete cobject;
|
|
}
|
|
|