C语言程序设计(郑莉)课后习题答案

private: int itsTop; int itsLeft; int itsBottom; int itsRight; };

Rectangle::Rectangle(int top, int left, int bottom, int right) {

itsTop = top; itsLeft = left; itsBottom = bottom; itsRight = right; }

int Rectangle::GetArea() const {

int Width = itsRight-itsLeft; int Height = itsTop - itsBottom; return (Width * Height); }

int main() {

Rectangle MyRectangle (100, 20, 50, 80 );

int Area = MyRectangle.GetArea();

cout << \return 0; }

程序运行输出: Area: 3000

Upper Left X Coordinate: 20

4-10 设计一个用于人事管理的People(人员)类。考虑到通用性,这里只抽象出所有类型人员都具有的属性:number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。其中\出生日期\定义为一个\日期\类内嵌子对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、带缺省形参值的成员函数、聚集。 解:

本题用作实验四的选做题,因此不给出答案。

4-11 定义一个矩形类,有长、宽两个属性,有成员函数计算矩形的面积 解:

#include

class Rectangle { public:

Rectangle(float len, float width) {

Length = len; Width = width; }

~Rectangle(){};

float GetArea() { return Length * Width; } float GetLength() { return Length; } float GetWidth() { return Width; } private: float Length; float Width; };

void main() {

float length, width;

cout << \请输入矩形的长度:\cin >> length;

cout << \请输入矩形的宽度:\cin >> width;

Rectangle r(length, width);

cout << \长为\宽为\的矩形的面积为:\

<< r.GetArea () << endl; }

程序运行输出: 请输入矩形的长度:5 请输入矩形的宽度:4

长为5宽为4的矩形的面积为:20

4-12 定义一个\数据类型\类,能处理包含字符型、整型、浮点型三种类型的数据,给出其构造函数。

17

解:

#include

class datatype{ enum{ character, integer, floating_point } vartype; union { char c; int i; float f; }; public:

datatype(char ch) { vartype = character; c = ch; }

datatype(int ii) { vartype = integer; i = ii; }

datatype(float ff) { vartype = floating_point; f = ff; }

void print(); };

void datatype::print() { switch (vartype) { case character:

cout << \字符型: \break; case integer:

cout << \整型: \break;

case floating_point:

cout << \浮点型: \break; } }

void main() {

datatype A('c'), B(12), C(1.44F);

A.print(); B.print(); C.print(); }

程序运行输出: 字符型: c 整型: 12 浮点型: 1.44

4-13 定义一个Circle类,有数据成员半径Radius,成员函数GetArea(),计算圆的面积,构造一个Circle的对象进行测试。 解:

#include

class Circle { public:

Circle(float radius){ Radius = radius;} ~Circle(){}

float GetArea() { return 3.14 * Radius * Radius; } private: float Radius; };

void main() {

float radius;

cout << \请输入圆的半径:\cin >> radius; Circle p(radius);

cout << \半径为\<< radius << \的圆的面积为:\<< p.GetArea () << endl; }

程序运行输出: 请输入圆的半径:5

半径为5的圆的面积为:78.5

4-14 定义一个tree类,有成员ages,成员函数grow(int years)对ages加上years,age()显示tree对象的ages的值。

18

解:

#include

class Tree { int ages; public: Tree(int n=0); ~Tree();

void grow(int years); void age(); };

Tree::Tree(int n) { ages = n; }

Tree::~Tree() { age(); }

void Tree::grow(int years) { ages += years; }

void Tree::age() {

cout << \这棵树的年龄为\}

void main() {

Tree t(12);

t.age(); t.grow(4); }

程序运行输出: 这棵树的年龄为12 这棵树的年龄为16

第 五 章 C++程序的基本结构

5-1 什么叫做作用域?有哪几种类型的作用域?

解:

作用域讨论的是标识符的有效范围,作用域是一个标识符在程序正文中有效的区域。C++的作用域分为函数原形作用域、块作用域(局部作用域)、类作用域和文件作用域.

5-2 什么叫做可见性?可见性的一般规则是什么? 解:

可见性是标识符是否可以引用的问题;

可见性的一般规则是:标识符要声明在前,引用在后,在同一作用域中,不能声明同名的标识符。对于在不同的作用域声明的标识符,遵循的原则是:若有两个或多个具有包含关系的作用域,外层声明的标识符如果在内层没有声明同名标识符时仍可见,如果内层声明了同名标识符则外层标识符不可见。

5-3 下面的程序的运行结果是什么,实际运行一下,看看与你的设想有何不同。 #include void myFunction();

int x = 5, y = 7; int main() {

cout << \cout << \myFunction();

cout << \cout << \cout << \return 0; }

void myFunction() {

int y = 10;

cout << \cout << \} 解:

程序运行输出:

19

x from main: 5 y from main: 7

x from myFunction: 5 y from myFunction: 10

Back from myFunction!

x from main: 5 y from main: 7

5-4 假设有两个无关系的类Engine和Fuel,使用时,怎样允许Fuel成员访问Engine中的私有和保护的成员? 解: 源程序: class fuel; class engine {

friend class fuel; private; int powerlevel; public;

engine(){ powerLevel = 0;} void engine_fn(fuel &f); };

class fuel {

friend class engine; private; int fuelLevel; public:

fuel(){ fuelLevel = 0;} void fuel_fn( engine &e); };

5-5 什么叫做静态数据成员?它有何特点? 解:

类的静态数据成员是类的数据成员的一种特例,采用static关键字来声明。对于类的普通数据成员,每一个类的对象都拥

有一个拷贝,就是说每个对象的同名数据成员可以分别存储不同的数值,这也是保证对象拥有自身区别于其它对象的特征的需要,但是静态数据成员,每个类只要一个拷贝,由所有该类的对象共同维护和使用,这个共同维护、使用也就实现了同一类的不同对象之间的数据共享。

5-6 什么叫做静态函数成员?它有何特点? 解:

使用static关键字声明的函数成员是静态的,静态函数成员属于整个类,同一个类的所有对象共同维护,为这些对象所共享。静态函数成员具有以下两个方面的好处,一是由于静态成员函数只能直接访问同一个类的静态数据成员,可以保证不会对该类的其余数据成员造成负面影响;二是同一个类只维护一个静态函数成员的拷贝,节约了系统的开销,提高程序的运行效率。

5-7 定义一个Cat类,拥有静态数据成员HowManyCats,记录Cat的个体数目;静态成员函数GetHowMany(),存取HowManyCats。设计程序测试这个类,体会静态数据成员和静态成员函数的用法。 解: 源程序:

#include

class Cat { public:

Cat(int age):itsAge(age){HowManyCats++; } virtual ~Cat() { HowManyCats--; } virtual int GetAge() { return itsAge; } virtual void SetAge(int age) { itsAge = age; } static int GetHowMany() { return HowManyCats; } private: int itsAge;

static int HowManyCats; };

int Cat::HowManyCats = 0;

void TelepathicFunction();

int main() {

20

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4