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