Visual C++ 实用教程 第4版 - 郑阿奇 - - 习题参考答案 下载本文

public:

CTeacher()

{ cout<<\年龄:\ cin>>age; }

void output()

{ CPerson::output();

cout<<\年龄:\ } };

void main()

{ CPerson person1; person1.output(); CStudent stu; stu.output();

CTeacher teacher; teacher.output();

}

27. 把定义平面直角坐标系上的一个点的类CPoint作为基类,派生出描述一条直线的类CLine,再派生出一个矩形类CRecto要求成员函数能求出两点间的距离、矩形的周长和面积 等。设计一个测试程序,并构造完整的程序。

#include #include

class CPoint //声明基类 { protected: int x0,y0; public:

CPoint(int a=0,int b=0) { x0=a;

y0=b;

}

void output()

{

cout<<\ cout<<\ } };

class CLine:public CPoint {

private: int x1,y1;

public: CLine(int x,int y, int u=0, int v=0):CPoint(x,y) { x1=u; y1=v; }

void output() { CPoint::output();

cout<<\ cout<<\ }

double length()

{

return (double)sqrt((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0) ); }

};

class CRect:public CPoint {

private: int x1,y1;

public:

CRect(int x,int y, int u=0, int v=0):CPoint(x,y) { x1=u; y1=v; } float length() };

{

return (float)(2*((x1-x0)+(y1-y0))); }

float area()

{

return (float)(x1-x0)*(y1-y0); }

void main()

{

CLine l(1,0,1,1);

cout<<\长度=\ CRect rect(0,1,4,10);

cout<<\周长=\ cout<<\面积=\ }

28. 定义一个字符串类CStrOne,包含一个存放字符串的数据成员,能够通过构造函数初始化字符串,通过成员函数显示字符串的内容。在此基础上派生出CStrTwo类,增加一个存放字符串的数据成员;并能通过派生类的构造函数传递参数,初始化两个字符串,通过成员函数进行两个字符串的合并以及输出。(字符串合并可使用标准库函数strcat,需要包含头 文件string.h)

#include #include class CStrOne { protected:

char *pstr; public: CStrOne( char str[ ]) { pstr=str; } void show()

{ cout<<\ } };

class CStrTwo:public CStrOne {

char *newpstr;

public: CStrTwo( char str1[ ],char str2[ ]):CStrOne(str1)

{ newpstr=str2; } void show()

{ cout<<\ cout<<\

}

void joint()

{ char temp[100];

strcpy(temp, pstr);

newpstr=strcat(temp,newpstr); cout<

void main() {

CStrTwo str(\ str.show(); str.joint(); }

2.3 多态和虚函数

29.什么是多态性?

所谓“多态性”就是不同对象收到相同的消息时,产生了不同的动作。这里的消息主要是指对类的成员函数的调用,因此的函数重载就是多态性的表现。

30.什么是虚函数?为什么要定义虚函数?

在函数的声明时,在函数名前面加上vitual就实现了虚函数的声明。通过虚函数和继承,可以实现运行时的多态性。即在程序执行前,根据函数和参数还无法确定应该调用哪一个函数,必须在程序的执行过程中,根据执行情况动态地确定。

31.什么是纯虚函数?什么是抽象类?

声明纯虚函数的一般格式为:

virtual 函数类型 函数名(形参表)=0;

它与一般虚函数不同的是:在纯虚函数的形参表后面多了个“=0”。把函数名赋于0,本质上是将指向函数的指针的初值赋为0,纯虚函数不能有具体的实现代码。

抽象类是指至少包含一个纯虚函数的特殊的类。它本身不能被实例化,也就是说不能声明一个抽象类的对象。必须通过继承得到派生类后,在派生类中定义了纯虚函数的具体的实现代码,才能获得一个派生类的对象。

32.分析下列程序的结果。 #include class B { public: B(){ }