📄 chapter4.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
<style type="text/css">
<!--
.style1 {
font-size: 16px;
color: #FF0000;
}
.style4 {color: #000000; font-size: 14px; }
-->
</style>
</head>
<body>
<p><span
class=style1><em><strong> 第 四 章 类</strong></em></span><br>
</p>
<p><span class="style4"><b>4-1 解释public和private的作用,公有类型成员与私有类型成员有些什么区别?</b><br>
</span></span></span></span></p>
<p class="style4">解: <br>
公有类型成员用public关键字声明,公有类型定义了类的外部接口;私有类型的成员用private关键字声明,只允许本类的函数成员来访问,而类外部的任何访问都是非法的,这样,私有的成员就整个隐蔽在类中,在类的外部根本就无法看到,实现了访问权限的有效控制。<br>
</span></p>
<p class="style4"><b>4-2 protected关键字有何作用?</b><br>
</span></p>
<p class="style4">解: <br>
protected用来声明保护类型的成员,保护类型的性质和私有类型的性质相似,其差别在于继承和派生时派生类的成员函数可以访问基类的保护成员。<br>
</span></p>
<p class="style4"><b>4-3 构造函数和析构函数有什么作用?</b><br>
</span></p>
<p class="style4">解: <br>
构造函数的作用就是在对象被创建时利用特定的值构造对象,将对象初始化为一个特定的状态,使此对象具有区别于彼对象的特征,完成的就是是一个从一般到具体的过程,构造函数在对象创建的时候由系统自动调用。<br>
析构函数与构造函数的作用几乎正好相反,它是用来完成对象被删除前的一些清理工作,也就是专门作扫尾工作的。一般情况下,析构函数是在对象的生存期即将结束的时刻由系统自动调用的,它的调用完成之后,对象也就消失了,相应的内存空间也被释放。<br>
</span></p>
<p class="style4"><b>4-4 数据成员可以为公有的吗?成员函数可以为私有的吗?</span></b><br>
</span></p>
<p class="style4">解: <br>
可以,二者都是合法的。数据成员和成员函数都可以为公有或私有的。但数据成员最好定义为私有的。<br>
</span></p>
<p class="style4"><b>4-5 已知class A中有数据成员int a,如果定义了A的两个对象A1、A2,它们各自的数据成员a的值可以不同吗?</span></b><br>
</span></p>
<p class="style4">解: <br>
可以,类的每一个对象都有自己的数据成员。 </span></p>
<p class=style4><b>4-6 什么叫做拷贝构造函数?拷贝构造函数何时被调用?</b><br>
</p>
<p class=style4>解: <br>
拷贝构造函数是一种特殊的构造函数,具有一般构造函数的所有特性,其形参是本类的对象的引用,其作用是使用一个已经存在的对象,去初始化一个新的同类的对象。在以下三种情况下会被调用:在当用类的一个对象去初始化该类的另一个对象时;如果函数的形参是类对象,调用函数进行形参和实参结合时;如果函数的返回值是类对象,函数调用完成返回时;<br>
</p>
<p class=style4><b>4-7 拷贝构造函数与赋值运算符(=)有何不同?</b><br>
</p>
<p class=style4>解: <br>
赋值运算符(=)作用于一个已存在的对象;而拷贝构造函数会创建一个新的对象。<br>
</p>
<p class=style4><b>4-8 定义一个Dog 类,包含的age、weight等属性,以及对这些属性操作的方法。实现并测试这个类。</b><br>
</p>
<p class=style4>解: <br>
源程序:<br>
#include <iostream.h></p>
<p class=style4>class Dog<br>
{<br>
public:<br>
Dog (int initialAge = 0, int initialWeight = 5);<br>
~Dog();<br>
int GetAge() { return itsAge;} // inline!<br>
void SetAge (int age) { itsAge = age;} // inline!<br>
int GetWeight() { return itsWeight;} // inline!<br>
void SetWeight (int weight) { itsAge = weight;} // inline!<br>
private:<br>
int itsAge, itsWeight;<br>
};</p>
<p class=style4>Dog::Dog(int initialAge, int initialWeight)<br>
{<br>
itsAge = initialAge;<br>
itsWeight = initialWeight;<br>
}</p>
<p class=style4>Dog::~Dog() //destructor, takes no action<br>
{<br>
}</p>
<p class=style4>int main()<br>
{<br>
Dog Jack(2,10);<br>
cout << "Jack is a Dog who is " ;<br>
cout << Jack.GetAge() << " years old and";<br>
cout << Jack.GetWeight() << " pounds weight.\n";<br>
Jack.SetAge(7);<br>
Jack.SetWeight(20);<br>
cout << "Now Jack is " ;<br>
cout << Jack.GetAge() << " years old and";<br>
cout << Jack.GetWeight() << " pounds weight.";<br>
<br>
return 0;<br>
}<br>
程序运行输出:<br>
Jack is a Dog who is 2 years old and 10 pounds weight.<br>
Now Jack is 7 years old 20 pounds weight.<br>
</p>
<p class=style4><b>4-9 设计并测试一个名为Rectangle的矩形类,其属性为矩形的左下角与右上角两个点的坐标,能计算矩形的面积。</b><br>
</p>
<p class=style4>解: <br>
源程序:<br>
#include <iostream.h><br>
class Rectangle<br>
{<br>
public:<br>
Rectangle (int top, int left, int bottom, int right);<br>
~Rectangle () {}</p>
<p class=style4>int GetTop() const { return itsTop; }<br>
int GetLeft() const { return itsLeft; }<br>
int GetBottom() const { return itsBottom; }<br>
int GetRight() const { return itsRight; }</p>
<p class=style4>void SetTop(int top) { itsTop = top; }<br>
void SetLeft (int left) { itsLeft = left; }<br>
void SetBottom (int bottom) { itsBottom = bottom; }<br>
void SetRight (int right) { itsRight = right; }</p>
<p class=style4>int GetArea() const;</p>
<p class=style4>private:<br>
int itsTop;<br>
int itsLeft;<br>
int itsBottom;<br>
int itsRight;<br>
};<br>
Rectangle::Rectangle(int top, int left, int bottom, int right)<br>
{<br>
itsTop = top;<br>
itsLeft = left;<br>
itsBottom = bottom;<br>
itsRight = right;<br>
}</p>
<p class=style4>int Rectangle::GetArea() const<br>
{<br>
int Width = itsRight-itsLeft;<br>
int Height = itsTop - itsBottom;<br>
return (Width * Height);<br>
}</p>
<p class=style4>int main()<br>
{<br>
Rectangle MyRectangle (100, 20, 50, 80 );</p>
<p class=style4>int Area = MyRectangle.GetArea();</p>
<p class=style4>cout << "Area: " << Area << "\n";<br>
return 0;<br>
}<br>
程序运行输出:<br>
Area: 3000<br>
Upper Left X Coordinate: 20<br>
</p>
<p class=style4><b>4-10 设计一个用于人事管理的People(人员)类。考虑到通用性,这里只抽象出所有类型人员都具有的属性:number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。其中"出生日期"定义为一个"日期"类内嵌子对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、带缺省形参值的成员函数、聚集。<br>
</b></p>
<p class=style4>解: <br>
本题用作实验四的选做题,因此不给出答案。<br>
</p>
<p class=style4><b>4-11 定义一个矩形类,有长、宽两个属性,有成员函数计算矩形的面积 </b><br>
</p>
<p class=style4>解: <br>
#include <iostream.h></p>
<p class=style4>class Rectangle<br>
{<br>
public:<br>
Rectangle(float len, float width)<br>
{<br>
Length = len;<br>
Width = width;<br>
}<br>
~Rectangle(){};<br>
float GetArea() { return Length * Width; }<br>
float GetLength() { return Length; }<br>
float GetWidth() { return Width; }<br>
private:<br>
float Length;<br>
float Width;<br>
};</p>
<p class=style4>void main()<br>
{<br>
float length, width;<br>
cout << "请输入矩形的长度:";<br>
cin >> length;<br>
cout << "请输入矩形的宽度:";<br>
cin >> width;<br>
Rectangle r(length, width);<br>
cout << "长为" << length << "宽为" << width << "的矩形的面积为:" <br>
<< r.GetArea () << endl;<br>
}</p>
<p class=style4>程序运行输出:<br>
请输入矩形的长度:5<br>
请输入矩形的宽度:4<br>
长为5宽为4的矩形的面积为:20<br>
</p>
<p class=style4><b>4-12 定义一个"数据类型" datatype类,能处理包含字符型、整型、浮点型三种类型的数据,给出其构造函数。<br>
</b></p>
<p class=style4>解: <br>
#include <iostream.h></p>
<p class=style4>class datatype{<br>
enum{<br>
character,<br>
integer,<br>
floating_point<br>
} vartype;<br>
union <br>
{<br>
char c;<br>
int i;<br>
float f;<br>
};<br>
public:<br>
datatype(char ch) {<br>
vartype = character;<br>
c = ch;<br>
}<br>
datatype(int ii) {<br>
vartype = integer;<br>
i = ii;<br>
}<br>
datatype(float ff) {<br>
vartype = floating_point;<br>
f = ff;<br>
}<br>
void print();<br>
};</p>
<p class=style4>void datatype::print() {<br>
switch (vartype) {<br>
case character:<br>
cout << "字符型: " << c << endl;<br>
break;<br>
case integer:<br>
cout << "整型: " << i << endl;<br>
break;<br>
case floating_point:<br>
cout << "浮点型: " << f << endl;<br>
break;<br>
}<br>
}</p>
<p class=style4>void main() {<br>
datatype A('c'), B(12), C(1.44F);<br>
A.print();<br>
B.print();<br>
C.print();<br>
}</p>
<p class=style4>程序运行输出:<br>
字符型: c<br>
整型: 12<br>
浮点型: 1.44<br>
</p>
<p class=style4><b>4-13 定义一个Circle类,有数据成员半径Radius,成员函数GetArea(),计算圆的面积,构造一个Circle的对象进行测试。</b><br>
</p>
<p class=style4>解: <br>
#include <iostream.h></p>
<p class=style4>class Circle<br>
{<br>
public:<br>
Circle(float radius){ Radius = radius;}<br>
~Circle(){}<br>
float GetArea() { return 3.14 * Radius * Radius; }<br>
private:<br>
float Radius;<br>
};</p>
<p class=style4>void main()<br>
{<br>
float radius;<br>
cout << "请输入圆的半径:";<br>
cin >> radius;<br>
Circle p(radius);<br>
cout << "半径为" << radius << "的圆的面积为:" << p.GetArea () <br>
<< endl;<br>
}</p>
<p class=style4>程序运行输出:<br>
请输入圆的半径:5<br>
半径为5的圆的面积为:78.5<br>
</p>
<p class=style4><b>4-14 定义一个tree类,有成员ages,成员函数grow(int years)对ages加上years,age()显示tree对象的ages的值。</b><br>
</p>
<p class=style4>解: <br>
#include <iostream.h></p>
<p class=style4>class Tree {<br>
int ages;<br>
public:<br>
Tree(int n=0);<br>
~Tree();<br>
void grow(int years);<br>
void age();<br>
};</p>
<p class=style4>Tree::Tree(int n) {<br>
ages = n;<br>
}</p>
<p class=style4>Tree::~Tree() {<br>
age();<br>
}</p>
<p class=style4>void Tree::grow(int years) {<br>
ages += years;<br>
}</p>
<p class=style4>void Tree::age() {<br>
cout << "这棵树的年龄为" << ages << endl;<br>
}</p>
<p class=style4>void main()<br>
{<br>
Tree t(12);<br>
<br>
t.age();<br>
t.grow(4);<br>
}<br>
<br>
程序运行输出:<br>
这棵树的年龄为12<br>
这棵树的年龄为16</p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -