[2018年6月20号]C++ primer 课后练习 第十八章用于大型程序的工具

18.28

无需前缀:bar,ival,cval,

需要前缀,foo,两个直接基类里都有该名称的函数

18.29

a.顺序为

1.class()

2.Base()

3.D1()

4.D2()

5.MI()

6.Class()

class Class {
public:
    Class(){
        cout << "Class()"<< endl;
    }
};
class Base:public Class {
public:
    Base() {
        cout << "Base()" << endl;
    }
};
class D1: virtual public Base {
public:
    class D1() {
        cout << "class D1()" << endl;
    }
};
class D2 : virtual public Base {
public:
    class D2() {
        cout << "class D2()" << endl;
    }
};
class MI: virtual public D1, virtual public D2 {
public:
    MI():Base() {
        cout << "MI()" << endl;
    }
};
class Final : public MI, public Class {
public:
    Final():Base(){
    
    }
};

b.由于Base是虚继承,所以有一个Base,Class通过继承链,和自身直接继承,拥有两个

c

a.派生类指针不能转化成基类指针

b.正确

c.派生类指针不能转化成基类指针

d.正确



18.30

class Class {
public:
    Class(){
        cout << "Class()"<< endl;
    }
};
class Base:public Class {
public:
    Base() = default;
    Base(const Base& b){
    }
    Base(const int & i) {
    }
};
class D1: virtual public Base {
public:
    D1()=default;
    D1(const D1& d) :Base(d) {
    }
    D1(const int & i) :Base(i) {
    }

};
class D2 : virtual public Base {
public:
    D2() = default;
    D2(const D2& d) :Base(d) {
    }
    D2(const int & i) :Base(i) {
    }
};
class MI: virtual public D1, virtual public D2 {
public:
    MI() = default;
    MI(const MI& d) :Base(d) {
    }
    MI(const int & i) :Base(i) {
    }
};
class Final : public MI, public Class {
public:
    Final() = default;
    Final(const Final& d) :Base(d) {
    }
    Final(const int & i) :Base(i) {
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值