1 //第一题目
2 class A //A为基类
3 {public:
4 void f1( );
5 int i;
6 protected:
7 void f2();
8 int j;
9 private:
10 int k;
11 };
12 /*f4里面是可以调用的
13 C的对象不能直接调用f2()的成员函数里
14 f2()也是类C的protected 函数在C++中派生类的成员函数是可以直接访问基类的保护成员和公有成员。
15 */
16 class B: public A //B为A的公用派生类
17 {public:
18 void f3( );
19 protected:
20 int m;
21 private:
22 int n;
23 };
24
25 class C: public B //C为B的公用派生类
26 {public:
27 void f4();
28 private:
29 int p;
30 };
31
32 int main()
33 {A a1; //a1是基类A的对象
34 B b1; //b1是派生类B的对象
35 C c1; //c1是派生类C的对象
36 return 0;
37 }
38 //(1)b1.i,b1.j可以,b1.k不可以
39 //(2)可以
40 //(3)i,j可以,k不可以
41 //(4)i,j,m,p可以,k,n,p不可以
42 //(5)可以
43 //(6)可以
44 //第二题目
45 #include <iostream>
46 using namespace std;
47 class A
48 {public:
49 void f1( );
50 protected:
51 void f2();
52 private:
53 int i;
54 };
55
56 class B: public A
57 {public:
58 void f3( );
59 int k;
60 private:
61 int m;
62 };
63
64 class C: protected B
65 {public:
66 void f4();
67 protected:
68 int n;
69 private:
70 int p;
71 };
72
73 class D: private C
74 {public:
75 void f5();
76 protected:
77 int q;
78 private:
79 int r;
80 };
81
82 int main()
83 {A a1;
84 B b1;
85 C c1;
86 D d1;
87 return 0;
88 }
89 //第三题目
90 #include <iostream>
91 using namespace std;
92 class A
93 {
94 public:
95 A(){a=0;b=0;}
96 A(int i){a=i;b=0;}
97 A(int i,int j){a=i;b=j;}
98 void display(){cout<<"a="<<a<<" b="<<b;}
99 private:
100 int a;
101 int b;
102 };
103
104 class B : public A
105 {
106 public:
107 B(){c=0;}
108 B(int i):A(i){c=0;}
109 B(int i,int j):A(i,j){c=0;}
110 B(int i,int j,int k):A(i,j){c=k;}
111 void display1()
112 {display();
113 cout<<" c="<<c<<endl;
114 }
115 private:
116 int c;
117 };
118
119 int main()
120 { B b1;
121 B b2(1);
122 B b3(1,3);
123 B b4(1,3,5);
124 b1.display1();//a=0,b=0,c=0
125 b2.display1();//a=1,b=0,c=0
126 b3.display1();//a=1,b=3,c=0
127 b4.display1();//a=1,b=3,c=5
128 return 0;
129 }
130 //第四题目
131 #include <iostream>
132 using namespace std;
133 class A
134 {
135 public:
136 A(){cout<<"constructing A "<<endl;}
137 ~A(){cout<<"destructing A "<<endl;}
138 };
139
140 class B : public A
141 {
142 public:
143 B(){cout<<"constructing B "<<endl;}
144 ~B(){cout<<"destructing B "<<endl;}
145 };
146
147 class C : public B
148 {
149 public:
150 C(){cout<<"constructing C "<<endl;}
151 ~C(){cout<<"destructing C "<<endl;}
152 };
153 int main()
154 { C c1;
155 return 0;
156 }
157 //a(),b(),c(),~c(),~b(),~a()构造从基类开始,析构顺序相反
158 //第五题目
159 #include<string>
160 #include <iostream>
161 using namespace std;
162 class Teacher
163 {public:
164 Teacher(string nam,int a,char s,string tit,string ad,string t);
165 void display();
166 protected:
167 string name;
168 int age;
169 char sex;
170 string title;
171 string addr;
172 string tel;
173 };
174
175 Teacher::Teacher(string nam,int a,char s,string tit,string ad,string t):
176 name(nam),age(a),sex(s),title(tit),addr(ad),tel(t){ }
177 void Teacher::display()
178 {cout<<"name:"<<name<<endl;
179 cout<<"age"<<age<<endl;
180 cout<<"sex:"<<sex<<endl;
181 cout<<"title:"<<title<<endl;
182 cout<<"address:"<<addr<<endl;
183 cout<<"tel:"<<tel<<endl;
184 }
185
186 class Cadre
187 {public:
188 Cadre(string nam,int a,char s,string p,string ad,string t);
189 void display();
190 protected:
191 string name;
192 int age;
193 char sex;
194 string post;
195 string addr;
196 string tel;
197 };
198
199 Cadre::Cadre(string nam,int a,char s,string p,string ad,string t):
200 name(nam),age(a),sex(s),post(p),addr(ad),tel(t){}
201
202 void Cadre::display()
203 {cout<<"name:"<<name<<endl;
204 cout<<"age:"<<age<<endl;
205 cout<<"sex:"<<sex<<endl;
206 cout<<"post:"<<post<<endl;
207 cout<<"address:"<<addr<<endl;
208 cout<<"tel:"<<tel<<endl;
209 }
210
211 class Teacher_Cadre:public Teacher,public Cadre
212 {public:
213 Teacher_Cadre(string nam,int a,char s,string tit,string p,string ad,string t,float w);
214 void show( );
215 private:
216 float wage;
217 };
218
219 Teacher_Cadre::Teacher_Cadre(string nam,int a,char s,string t,string p,string ad,string tel,float w):
220 Teacher(nam,a,s,t,ad,tel),Cadre(nam,a,s,p,ad,tel),wage(w) {}
221 void Teacher_Cadre::show( )
222 {Teacher::display();//调用teacher的display函数输出
223 cout<<"post:"<<Cadre::post<<endl;
224 cout<<"wages:"<<wage<<endl;
225 }
226
227 int main( )
228 {Teacher_Cadre te_ca("Wang-li",50,'f',"prof.","president","135 Beijing Road,Shanghai","(021)61234567",1534.5);
229 te_ca.show( );
230 return 0;
231 }