C++primer 15.5节练习

练习15.18

只有当派生类公有继承基类时,用户代码才能使用派生类向基类的转换:B &tb=D;

Base *p=&d1; 正确,Pub_Derv是公有继承Base

p=&d2; 错误,Priv_Derv是私有继承Base

p=&d3; 错误,Prot_Dery是保护继承Base

p=&dd1; 正确,Derived_from_Public是公有继承于Pub_Dery的

p=&dd2; 错误,Priv_Derv是私有继承于Base

p=&dd3; 错误,Prot_Dery是保护继承于Base

练习15.19

 1 class Base  
 2 {  
 3     char priv;  
 4 protected:  
 5     int prot;  
 6 public:  
 7     void pub() {}  
 8     void memfcn(Base &b) { b = *this; } //正确  
 9 };  
10 struct Pub_Dery :public Base  
11 {  
12     void memfcn(Base &b) { b = *this; } //正确  
13     int f() { return prot; }  
14 };  
15 struct Prot_Dery :protected Base  
16 {  
17     void memfcn(Base &b) { b = *this; } //正确  
18 };  
19 struct Priv_Dery:private Base  
20 {  
21     void memfcn(Base &b) { b = *this; } //正确  
22     int f1() { return prot; }  
23 };  
24 struct dfpub :public Pub_Dery  
25 {  
26     void memfcn(Base &b) { b = *this; } //正确,公有继承派生类的派生类可以访问其公有与保护部分  
27     int use_base() { return prot; }  
28 };  
29 struct dfpro:public Prot_Dery  
30 {  
31     void memfcn(Base &b) { b = *this; } //正确,保护继承派生类的派生类可以访问其保护部分  
32 };  
33 struct dfpri :public Priv_Dery  
34 {  
35     void memfcn(Base &b) { b = *this; } //错误,Base类型不可访问,不允许对不可访问的基类“base”进行转换。原因是Priv_Dery是私有继承Base的,所以对于dfpri来说,其Priv_Dery部分的base部分是私有的 

练习15.20

见上

练习15.21

时间: 2024-10-25 22:43:39

C++primer 15.5节练习的相关文章

C++primer 15.3节练习

练习15.11 1 #include <iostream> 2 #include <string> 3 #include <utility> 4 #include <memory> 5 #include <vector> 6 7 using namespace std; 8 9 class Quote { 10 public: 11 Quote() = default; 12 Quote(const string &book, doubl

C++primer 15.8节练习

练习15.28 1 #include <iostream> 2 #include <string> 3 #include <utility> 4 #include <memory> 5 #include <vector> 6 7 using namespace std; 8 9 class Quote { 10 public: 11 Quote() : bookNo(""), price(0.0) { cout <<

C++primer 15.4节练习

练习15.15.练习15.16 1 #include <iostream> 2 #include <string> 3 #include <utility> 4 #include <memory> 5 #include <vector> 6 7 using namespace std; 8 9 class Quote { 10 public: 11 Quote() = default; 12 Quote(const string &boo

C++primer 15.6节练习

练习15.23 1 class Base { 2 public: 3 virtual int fcn(); 4 }; 5 6 class D1 : public Base { 7 public: 8 int fcn(); 9 virtual void f2(); 10 }; 11 12 class D2 : public D1 { 13 public: 14 int fcn(int); 15 int fcn(); 16 void f2(); 17 }; 18 跟bp2有关的需要重新解析:bp2-

C++primer 15.7.3节练习

练习15.26 写的时候不小心写到了派生类Disc_quote,其实是一样的,主要明白原理即可 1 #include <iostream> 2 #include <string> 3 #include <utility> 4 #include <memory> 5 #include <vector> 6 7 using namespace std; 8 9 class Quote { 10 public: 11 Quote() : bookNo(

C++primer 15.2.2节练习

练习15.4 a)错误,一个类不能派生它本身 b)正确,Derived从他的基类Base派生,且规定派生类从基类继承的数据成员对于派生类的用户是不可见. c)错误,派生类的声明与其他类相差不大,声明中包含类名但是不包含他的派生列表: 练习15.5 1 #include <iostream> 2 #include <string> 3 #include <utility> 4 #include <memory> 5 #include <vector>

C++primer 15.7.4节练习

练习15.27 1 #include <iostream> 2 #include <string> 3 #include <utility> 4 #include <memory> 5 #include <vector> 6 7 using namespace std; 8 9 class Quote { 10 public: 11 Quote() : bookNo(""), price(0.0) { cout <<

C++primer 15.2.1节练习

练习15.1 基类将类型相关的函数与派生类不做改变直接继承的函数区别对待,对于某些函数,基类希望他的派生类个自定义适合自身的版本,此时基类就将这些函数声明成虚函数. 练习15.2 protected:允许类的派生类访问其成员,而不允许其他用户访问 private:禁止所有用户包括其派生类访问其私有成员 练习15.3 1 #include <iostream> 2 #include <string> 3 #include <utility> 4 #include <

C++primer 15.2.3节练习

练习15.8 静态类型:对象在声明时采用的类型,是在编译期确定的 动态类型:目前所指对象的类型,是在运行时确定的 练习15.9 第一种情况:当对象的静态类型和对象的动态类型之间存在隐式的转换的情况下,静态类型可能与动态类型不同 第二种:当基类指针或者基类引用指向派生类对象的时候 练习15.10 ifsteam定义一个文件输入流对象,将输入流对象所输入写到sales_data类对象中.