1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
#include <iostream>
using namespace std;
////////////////////////////////////////////////////////
class A
{
public:
A() { std::cout << "A BAD_0!" << std::endl; }
A( unsigned int val ) { std::cout << "A BAD_1!" << std::endl; }
A( float val_1, unsigned int val_2, unsigned int val_3 ) { std::cout << "A GOOD!" << std::endl; }
};
////////////////////////////////////////////////////////
class B : public A
{
public:
B( unsigned int val = 0 ) : A( val )
{ std::cout << "B BAD!" << std::endl; }
B( float val_1, unsigned int val_2, unsigned int val_3 = 0)
: A( val_1, val_2, val_3 )
{ std::cout << "B GOOD!" << std::endl; }
};
////////////////////////////////////////////////////////
//class C : public B // VERSION WITH NO PROBLEM
class C : public virtual B // VERSION WITH PROBLEM
{
public:
C( unsigned int val = 0) : B( val )
{ std::cout << "C BAD!" << std::endl; }
C( float val_1, unsigned int val_2, unsigned int val_3 = 0 )
: B( val_1, val_2, val_3 )
{ std::cout << "C GOOD!" << std::endl; }
};
////////////////////////////////////////////////////////
class D : public virtual C
{
public:
D( unsigned int val = 0) : C( val )
{ std::cout << "D BAD!" << std::endl; }
D( float val_1, unsigned int val_2, unsigned int val_3)
: C(val_1, val_2, val_3 )
{ std::cout << "D GOOD!" << std::endl; }
};
////////////////////////////////////////////////////////
int main( int argc, char ** argv)
{
D* d_instance = new D(1, 2, 3);
std::cout << " ----" << std::endl;
C* c_intance = new C(1, 2, 3 );
getchar();
return EXIT_SUCCESS;
} |
Partager