15第十二周实践项目——程序阅读
2015-05-24 09:56
183 查看
/*
* Copyright (c) 2014, 烟台大学计算机学院
* All rights reserved.
* 文件名称:test.cpp
* 作 者:李晓凯
* 完成日期:2015年 5 月 24 日
* 版 本 号:v1.0
*
* 问题描述:
* 输入描述:
* 程序输出:
*/
(1)
(2)
(3)
(4)
问题:
将程序中有注释的两条语句修改为注释的内容,即将“class B:public A {};”修改为“class B:virtual public A{};”,“class C:public A {}; ”修改为“class C:virtual public A{};”,重新编译运行程序,程序的运行结果又是多少?
答案:20
原因:在D类中只有一个n,而没有B类和C类之分,所以输出20.
(5)阅读下面类的定义,请说出在测试函数中不同情况的调用产生的结果
②
程序会发生编译错误,原因是:____基类不能对派生类赋值______
③
那一行的错误原因是:_______r2是类A的对象,不能调用类B的成员函数___________
④
那一行的错误原因是:_______指针对象p属于A,不能指向类B中的成员函数___________
⑤
类A中加入以下代码:
* Copyright (c) 2014, 烟台大学计算机学院
* All rights reserved.
* 文件名称:test.cpp
* 作 者:李晓凯
* 完成日期:2015年 5 月 24 日
* 版 本 号:v1.0
*
* 问题描述:
* 输入描述:
* 程序输出:
*/
(1)
#include <iostream> using namespace std; class A { public: A() { a=0; } A (int i) { a=i; } void print() { cout<<a<<" "; } private: int a; }; class B: public A { public: B() { b=0; } B(int i, int j, int k): A(i),aa(j) { b=k; } //思考:这3处出现的print,有何区别 void print() //(1) { A::print(); //(2) aa.print(); //(3) cout<<b<<endl; } private: int b; A aa; }; int main() { B test[2]; test[0]=B(1,4,7); test[1]=B(2,5,8); for(int i=0; i<2; i++) test[i].print(); return 0; }
(2)
#include <iostream> using namespace std; class A { public: A(char *s) { cout<<s<<endl; } }; class B:public A { public: B(char *s1, char *s2):A(s1) { cout<<s2<<endl; } }; class C:public A { public: C(char *s1,char *s2):A(s1) { cout<<s2<<endl; } }; class D:public B, C { public: D(char *s1,char *s2,char *s3,char *s4):B(s1,s2),C(s3,s4) { cout<<s4<<endl; } }; int main() { D d("class A","class B","class C","class D"); return 0; }
(3)
#include <iostream> using namespace std; class Base { public: Base(char i) { cout<<"Base constructor. --"<<i<<endl; } }; class Derived1:virtual public Base { public: Derived1(char i,char j):Base(i) { cout<<"Derived1 constructor. --"<<j<<endl; } }; class Derived2:virtual public Base { public: Derived2(char i,char j):Base(i) { cout<<"Derived2 constructor. --"<<j<<endl; } }; class MyDerived:public Derived1,public Derived2 { public: MyDerived(char i,char j,char k,char l,char m,char n,char x): Derived2(i,j), Derived1(k,l), Base(m), d(n) { cout<<"MyDerived constructor. --"<<x<<endl; } private: Base d; }; int main() { MyDerived obj('A','B','C','D','E','F','G'); return 0; }
(4)
#include<iostream> using namespace std; class A { public: int n; }; class B:public A {}; // class B:virtual public A{}; class C:public A {}; // class C:virtual public A{}; class D:public B,public C { public: int getn() {return B::n;} }; int main() { D d; d.B::n=10; d.C::n=20; cout<<d.getn()<<endl; return 0; }
问题:
将程序中有注释的两条语句修改为注释的内容,即将“class B:public A {};”修改为“class B:virtual public A{};”,“class C:public A {}; ”修改为“class C:virtual public A{};”,重新编译运行程序,程序的运行结果又是多少?
答案:20
原因:在D类中只有一个n,而没有B类和C类之分,所以输出20.
(5)阅读下面类的定义,请说出在测试函数中不同情况的调用产生的结果
#include <iostream> using namespace std; class A { protected: int a,b; public: A(int aa, int bb):a(aa), b(bb) {} void printA() { cout<<"a: "<<a<<"\tb: "<<b<<endl; } }; class B: public A { int c; public: B(int aa, int bb, int cc):A(aa,bb),c(cc) {} void printB() { cout<<"a: "<<a<<"\tb: "<<b<<"\tc: "<<c<<endl; } }; int main() { A a(1,1); B b(2,3,4); //此处加入下面各小题中的代码 return 0; }①
a=b; a.printA(); b.printA(); b.printB();
②
b=a; a.printA(); b.printA(); b.printB();
程序会发生编译错误,原因是:____基类不能对派生类赋值______
③
A &r1=a; A &r2=b; r1.printA(); r2.printA(); r2.printB();将会发生错误的一行删除;r2.printB();
那一行的错误原因是:_______r2是类A的对象,不能调用类B的成员函数___________
④
A *p=&a; p->printA(); p=&b; p->printA(); p->printB();将会发生错误的一行删除;p->printB();
那一行的错误原因是:_______指针对象p属于A,不能指向类B中的成员函数___________
⑤
类A中加入以下代码:
int getA(){return a;}main函数前加以下代码:
void f(A x) { cout<<"aaaaah, my a: "<<x.getA()<<endl; }main中指定部分代码:
f(a); f(b);
相关文章推荐
- 第十二周上机实践项目-项目1-(2)-阅读程序
- 第十二周上机实践项目-阅读程序-4
- 15第十一周实践项目——程序阅读
- 15第十六周实践项目——程序阅读
- 第十二周上机实践项目-阅读程序-1-(3)
- 第十二周上机实践项目-阅读程序-1
- 第十二周 项目一 程序阅读1-1
- 第14周-输入输出流,文本文件-项目0-课后实践·程序阅读1
- 第14周-输入输出流,文本文件-项目0-课后实践·程序阅读4
- 第十六周实践项目-阅读程序(2)
- 第十二周项目1-阅读程序(一)
- 第十二周 项目一:阅读程序(2)
- 第十二周项目一阅读程序(2)① 无 int a=8
- 第十二周 项目一阅读程序(2)
- 第十二周项目一阅读程序(2)
- 第十二周上机项目1 阅读程序(2)
- 第十二周项目训练1.3 阅读程序
- 第十二周项目-阅读程序2
- 第13周-多态性-项目0-课后实践·阅读程序1.
- 第十二周项目1-阅读程序(1)