Enter a length: 50
Rect2 width: 20 Rect2 length: 50
3-10 对Point类重载++(自增)、--(自减)运算符 解:
#include
class Point {
public:
Point& operator++(); Point operator++(int);
Point& operator--(); Point operator--(int);
Point() { _x = _y = 0; }
int x() { return _x; } int y() { return _y; } private: int _x, _y; };
Point& Point::operator++() { _x++; _y++;
return *this; }
Point Point::operator++(int) {
Point temp = *this; ++*this; return temp; }
Point& Point::operator--() { _x--; _y--;
return *this; }
Point Point::operator--(int) {
Point temp = *this; --*this;
return temp; }
void main() {
Point A;
cout <<\的值为:\A++;
cout <<\的值为:\++A;
cout <<\的值为:\A--;
cout <<\的值为:\--A;
cout <<\的值为:\}
程序运行输出: A的值为:0 , 0 A的值为:1 , 1 A的值为:2 , 2 A的值为:1 , 1 A的值为:0 , 0
第四 章 面向对象
4-1 解释public和private的作用,公有类型成员与私有类型成员有些什么区别? 解:
公有类型成员用public关键字声明,公有类型定义了类的外部接口;私有类型的成员用private关键字声明,只允许本类的函数成员来访问,而类外部的任何访问都是非法的,这样,私有的成员就整个隐蔽在类中,在类的外部根本就无法看到,实现了访问权限的有效控制。
4-2 protected关键字有何作用? 解:
protected用来声明保护类型的成员,保护类型的性质和私有类型的性质相似,其差别在于继承和派生时派生类的成员函数可以访问基类的保护成员。
4-3 构造函数和析构函数有什么作用? 解:
构造函数的作用就是在对象被创建时利用特定的值构造对象,将对象初始化为一个特定的状态,使此对象具有区别于彼对象的特征,完成的就是是一个从一般到具体的过程,构造函数在对象创建的时候由系统自动调用。
析构函数与构造函数的作用几乎正好相反,它是用来完成对象被删除前的一些清理工作,也就是专门作扫尾工作的。一般情况下,析构函数是在对象的生存期即将结束的时刻由系统自动调用的,它的调用完成之后,对象也就消失了,相应的内存空间也被释放。
4-4 数据成员可以为公有的吗?成员函数可以为私有的吗? 解:
可以,二者都是合法的。数据成员和成员函数都可以为公有或私有的。但数据成员最好定义为私有的。
4-5 已知class A中有数据成员int a,如果定义了A的两个对象A1、A2,它们各自的数据成员a的值可以不同吗? 解:
可以,类的每一个对象都有自己的数据成员。
第五 章 数组、指针与字符串 5-1 数组A[10][5][15]一共有多少个元素? 解: 10×5×15 = 750 个元素
5-2 在数组A[20]中第一个元素和最后一个元素是哪一个? 解:
第一个元素是A[0],最后一个元素是A[19]。
5-3 用一条语句定义一个有五个元素的整型数组,并依次赋予1~5的初值。 解: 源程序:
int IntegerArray[5] = { 1, 2, 3, 4, 5 }; 或:int IntegerArray[] = { 1, 2, 3, 4, 5 };
5-4 已知有一个数组名叫oneArray,用一条语句求出其元素的个数。 解: 源程序:
nArrayLength = sizeof(oneArray) / sizeof(oneArray[0]);
5-5 用一条语句定义一个有5×3个元素的二维整型数组,并依次赋予1~15的初值。
解: 源程序:
int theArray[5][3] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };
或:int theArray[5][3] = { {1,2,3}, {4,5,6}, {7,8,9}, {10,11,12},{13,14,15} };
5-6 运算符*和&的作用是什么? 解:
*称为指针运算符,是一个一元操作符,表示指针所指向的对象的值;&称为取地址运算符,也是一个一元操作符,是用来得到一个对象的地址。
5-7 什么叫做指针?指针中储存的地址和这个地址中的值有何区别? 解:
指针是一种数据类型,具有指针类型的变量称为指针变量。指针变量存放的是另外一个对象的地址,这个地址中的值就是另一个对象的内容。
5-8 定义一个整型指针,用new语句为其分配包含10个整型元素的地址空间。 解: 源程序:
int *pInteger = new int[10];
5-9 声明下列指针:float类型变量的指针pFloat,char类型的指针pString和int类型的指针pint。 解:
float *pfloat; char *pString; intr *pint;
5-10 给定float类型的指针fp,写出显示fp所指向的值的输出流语句。 解:
cout <<\
5-11 程序中定义一个double类型变量的指针。分别显示指针占了多少字节和指针所指的变量占了多少字节。 解:
double *counter;
cout <<\
cout << '\\nSize of addressed value == \
5-12 const int * p1 和 int * const p2的区别是什么? 解:
const int * p1 声明了一个指向整型常量的指针p1,因此不能通过指针p1来改变它所指向的整型值;int * const p2声明了一个指针型常量,用于存放整型变量的地址,这个指针一旦初始化后,就不能被重新赋值了。
5-13 定义一个整型变量a,初值为5,一个整型指针p,通过p把a的值改为10 解:
void main() {
int a=5; int *p = &a; *p = 10; }
5-14 下列程序有何问题,请仔细体会使用指针时应避免出现这个的问题。 #include
int *p;
int *pInt = 9;
std::cout <<\return 0; }
解:
指针p没有初始化,也就是没有指向某个确定的内存单元,它指向内存中的一个随机地址,给这个随机地址赋值是非常危险的。
5-15 下列程序有何问题,请改正;仔细体会使用指针时应避免出现的这个问题。 #include
int a = Fn1();
cout <<\return 0; }
int Fn1() {
int * p = new int (5); return *p; }
解:
此程序中给*p分配的内存没有被释放掉。 改正:
#include