Chinaunix首页 | 论坛 | 博客
  • 博客访问: 42138
  • 博文数量: 11
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 120
  • 用 户 组: 普通用户
  • 注册时间: 2006-11-10 10:40
文章分类
文章存档

2010年(1)

2008年(1)

2007年(9)

我的朋友
最近访客

分类: C/C++

2007-03-25 18:49:30

"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) |
0

上一篇:春分

下一篇:虚拟继承

给主人留下些什么吧!~~