[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) {
    }
};

猜你喜欢

转载自blog.csdn.net/qq_22478401/article/details/80741056