"inherit.hpp"
class testbase
{
private:
int m_base_data;
public:
testbase(int data);
virtual ~testbase();
void print() const;
};
class test1 : public testbase
{
private:
int m_test1_data;
public:
test1(int basedata, int data);
virtual ~test1();
void print() const;
};
class test2 : public testbase
{
private:
int m_test2_data;
public:
test2(int basedata, int data);
virtual ~test2();
void print() const;
};
class test3 : public test1, public test2
{
private:
int m_test3_data;
public:
test3(int test1_base_data, int test1_data, int test2_base_data, int test2_data, int data);
virtual ~test3();
void print() const;
};
inherit.cpp
#include
using namespace std;
#include "inherit.hpp"
testbase::testbase(int data)
{
m_base_data = data;
cout<<"construct class testbase"<}
testbase::~testbase()
{
cout<<"destruct class testbase"<}
void testbase::print() const
{
cout<<"class testbase data:\t"<}
test1::test1(int basedata, int data):testbase(basedata)
{
m_test1_data = data;
cout<<"construct class test1"<}
test1::~test1()
{
cout<<"desturct class test1"<}
void test1::print() const
{
testbase::print();
cout<<"class test1 data:\t"<}
test2::test2(int basedata, int data):testbase(basedata)
{
m_test2_data = data;
cout<<"construct class test2"<}
test2::~test2()
{
cout<<"desturct class test2"<}
void test2::print() const
{
testbase::print();
cout<<"class test2 data:\t"<}
test3::test3(int test1_base_data, int test1_data, int test2_base_data, int test2_data, int data)
: test1(test1_base_data, test1_data), test2(test2_base_data, test2_data)
{
m_test3_data = data;
cout<<"construct class test3"<}
test3::~test3()
{
cout<<"destruct class test3"<}
void test3::print() const
{
test1::print();
test2::print();
cout<<"class test3 data:\t"<}
int main()
{
test3 *pdata = new test3(1, 2, 3, 4, 5);
test2 *ptest2data = pdata;
test1 *ptest1data = pdata;
testbase *pbasedata = NULL;
cout<<"class test3"< pdata->print();
cout<<"class test2"< ptest2data->print();
cout<<"class test1"< ptest1data->print();
cout<<"class testbase from test2"< pbasedata = ptest2data;
pbasedata->print();
cout<<"class testbase from test1"< pbasedata = ptest1data;
pbasedata->print();
cout<
//没有虚拟继承,这里编译不过去
//错误信息:error C2594: '=' : ambiguous conversions from 'class test3 *' to 'class testbase *'
//pbasedata = pdata;
//pbasedata->print();
delete pdata;
return 0;
}
输出结果:
construct class testbase
construct class test1
construct class testbase
construct class test2
construct class test3
class test3
class testbase data: 1
class test1 data: 2
class testbase data: 3
class test2 data: 4
class test3 data: 5
class test2
class testbase data: 3
class test2 data: 4
class test1
class testbase data: 1
class test1 data: 2
class testbase from test2
class testbase data: 3
class testbase from test1
class testbase data: 1
destruct class test3
desturct class test2
destruct class testbase
desturct class test1
destruct class testbase
阅读(1475) | 评论(0) | 转发(0) |