C++OOP复习题-本部(to学生)(5)

2019-01-26 13:35

A(int a):x(a){ cout<<\ int f(){ return ++x; }

~A(){cout<<\private: int x; };

class B:public virtual A{ private: int y; A Aobj; public:

B(int a,int b,int c):A(a),y(c),Aobj(c){ cout<<\ int f(){ A::f(); Aobj.f(); return ++y; }

void display(){ cout<

~B(){cout<<\ };

class C:public B{ public:

C(int a,int b,int c):B(a,b,c),A(0){ cout<<\};

class D:public C,public virtual A{ public:

D(int a,int b,int c):C(a,b,c),A(c){ cout<<\ ~D(){cout<<\};

void main(){ D d(7,8,9); d.f();

d.display(); } 答:

从上到下A constructor...9 依次为: A constructor...9

B constructor...9 C constructor... D constructor...

12 12 11 destructor D....

destructor B... destructor A... destructor A...

4.5. 第5章 多态性(P156~157)

1、 请阅读程序,根据虚函数的特性,按顺序写出程序的运行结果。(P156,第4

(1)题,ex5-4-1.cpp) #include using namespace std; class Base{ protected: int n; public:

Base(int m){ n=m++; }

virtual void g1(){ cout<<\ g4(); } virtual void g2(){ cout<<\ virtual void g3(){ cout<<\g4(); } virtual void g4(){ cout<<\} };

class Derived:public Base{ //公有继承 int j; public:

Derived(int n1,int n2):Base(n1){ j=n2; }

void g1(){ cout<<\g2(); } void g3(){ cout<<\g4(); } };

void main(){

Derived Dobj(1,0); Base Bobj=Dobj; Bobj.g1();

cout<<\ Base *bp=&Dobj; bp->g1();

cout<<\ Base &bobj2=Dobj; bobj2.g1();

cout<<\ Dobj.g1(); } 答:

从上到下Base::g1()...1 依次为: Base::g4()...2

------------------

Deri::g1()...2 Base::g2()...3 Deri::g2()...4 Base::g4()...5 ------------------ Deri::g1()...6 Base::g2()...7 Deri::g2()...8 Base::g4()...9 ------------------ Deri::g1()...10 Base::g2()...11 Deri::g2()...12 Base::g4()...13

2、 请阅读程序,根据虚函数和纯虚函数的定义与特性,按顺序写出程序的运行

结果。(P156,第4(2)题,ex5-4-2.cpp) #include class Shape{ public:

virtual double area(){ return 0; } virtual void print()=0; };

class Circle:public Shape{ protected: double r; public:

Circle(double x):r(x){ }

double area(){ return 3.14*r*r; } //(1) void print(){ cout<<\//(2) };

class Cylinder:public Circle{ double h; public:

Cylinder(double r,double x):Circle(r),h(x){ }

double area(){ return 2*3.14*r*r+2*3.14*h; } //(3) };

void shapeArea(Shape &s){ cout<print(); } //(5) void main(){ Shape *s[3];

s[0]=&Circle(10);

s[1]=&Cylinder(20,100); for(int i=0; i<2; i++){

shapeArea(*s[i]); shapePrint(s[i]); } } 答: 说明:

i=0时,(4)-(1)-(5)-(2)-(1); i=1时,(4)-(3)-(5)-(2)-(3); 从上到下314

依次为: Circle : r=10 area=314

3140

Circle : r=20 area=3140

3、 请阅读程序,根据类型信息和类型转换的原理,按顺序写出程序的运行结果。

(P157,第4(3)题,ex5-4-3.cpp)——不要求! #include using namespace std; class A{ public:

void virtual f(){cout<<\};

class B:public A{ public:

void f(){cout<<\ void fb(){cout<<\};

class C:public A{ public:

void f(){cout<<\

void fc(){cout<<\};

void f(A *p){ p->f();

if (typeid(*p)==typeid(B)) { B *bp=dynamic_cast(p); bp->fb(); }

if (typeid(*p)==typeid(C)){ C *bc=dynamic_cast(p); bc->fc(); } }

void main(){

A *pa; B b; C c;

pa=&b; f(pa); pa=&c; f(pa); } 答:

从上到下f() in class B

依次为: normal function fb

f() in class C

normal function fc

4.6. 第6章 运算符重载(P183~185)

1、 请阅读程序,根据友元函数运算符重载的定义,按顺序写出程序的运行结果。

(P183,第5(1)题,ex6-5-1.cpp) #include class ABC{ int a,b,c; public:

ABC(int x,int y,int z):a(x),b(y),c(z){ }

friend ostream &operator<<(ostream &out,ABC& f); };

ostream &operator<<(ostream &out,ABC& f){

out<<\ return out; }

void main(){

ABC obj(10,20,30); cout<

从上到下a=10 依次为: b=20

c=30

2、 请阅读程序,根据对象赋值及构造的特性,按顺序写出程序的运行结果。

(P184,第5(2)题,ex6-5-2.cpp)——不要求! #include #include class X{ private: char *s; public:

X(char *b){ s=new char[sizeof(b)+1]; strcpy(s,b);


C++OOP复习题-本部(to学生)(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2018年保定市房地产开发企业名录712家

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: