C++课后习题(3)

2019-08-30 23:18

博学谷——让IT教学更简单,让IT学习更有效 p->getperim(); }

void main() { shape *p; //基类指针 rectangle a(3, 4, 5); //构造矩形对象 circle b(10); //构造圆形对象 p = &a; //基类指针指向矩形 show(p); p = &b; //基类指针指向圆形 show(p); system(\}

第四章题目

一、填空题

1、运算符重载的本质是,它也是C++的一种体现,为用户提供了一个直观的接口,调用运

算符操作自定义数据类型其实就是调用运算符函数。 2、运算符重载时其函数名由构成。成员函数重载双目运算符是,左操作数是,右操作数是。 3、重载之后的运算符不能改变其和,也不能改变其操作数的个数及语法结构。

4、如果是单目运算符重载为类的成员函数,则要分为前置与后置运算符,如果是前置运算符,则它的操作数是函数调用者,函数没有参数;如果是后置单目运算符,则函数要带一个,这个整型参数不起任何作用,只是用来区分前置与后置。 二、选择题

5、下列关于插入运算符”<<”的重载的描述中,错误的是()。 A、运算符函数的返回值类型是ostream B、重载的运算符必须定义为类的成员函数 C、运算符函数的第一个参数的类型是ostream D、运算符函数有两个参数

6、现需要对list类重载”==”运算符,以下函数声明正确的是() A、friend bool operator== (const Student& st1, const Student& st2); B、bool operator== (const Student& st1); C、friend list operator== (const Student& st1);

D、bool operator== (const Student& st1, const Student& st2);

7、在重载一个运算符时,其参数表中没有任何参数,则下列描述中正确的是() A、作为友元函数重载的一元运算符 B、作为成员函数重载的一元运算符 C、作为友元函数重载的二元运算符 D、作为成员函数重载的二元运算符

8、下列关于运算符重载的描述中,正确的是( ) A、所有运算符都可以重载

B、通过重载,可以使运算符应用于自定义的数据类型 C、通过重载,可以创造原来没有的运算符

博学谷——让IT教学更简单,让IT学习更有效

D、通过重载,可以改变运算的优先级 三、判断题

9、运算符重载可以创建新运算符。

10、C++中有5个运算符不可以重载:类属关系运算符“.”、成员指针运算符“*”、作用域

运算符“::”、sizeof运算符和三目运算符“?:”。 11、有4个运算符必须重载为类的成员函数:赋值(=)、下标([])、调用(())、成员访问

箭头(->)。 12、

四、简答题

13、请阅读下面的程序,分析程序是否能通过编绎,如果不能写出原因;如果能,写出运行结果。

#include using namespace std;

class Point { int x, y; public: Point(int x = 0, int y = 0) { this->x = x; this->y = y; cout << \ } Point & operator++() { x++; y++; cout << \ return *this; } Point operator++(int) { Point temp; temp = *this; ++(this->x); ++(this->y); cout << \ return temp; } friend ostream & operator<<(ostream &os, Point&p) { os << \ return os; }

博学谷——让IT教学更简单,让IT学习更有效

~Point(){ cout << \};

void main() { Point P1(10, 20); cout << P1++ << endl; cout << ++P1 << endl; system(\}

14、请简述运算符重载有哪些形式,各有什么特点。 15、请按照下列要求编写程序: 要求:

1)定义复数类型Complex; 2)通过重载加号“+”、减号“-”运算符完成两个复数的相加; 3)将加减号重载为类的友元函数。

第四章答案

1、函数重载 多态

2、operator运算符对象函数参数 3、优先级 结合性 4、整型参数 5、B 6、AB 7、B 8、B 9、错 10、对 11、对 12、

13、能通过编绎。 运行结果:

call the default constructor! call the default constructor! call the Post_Selfplus! call the destructor! Point P2:10;20

call the destructor! call the Pre_Selfpuls! Point P2:12;22

14、运算符重载有两种形式:重载为类的成员函数和重载为类的友员函数。 成员函数运算符与友元函数运算符也具有各自的一些特点:

博学谷——让IT教学更简单,让IT学习更有效

(1)一般情况下,单目运算符最好重载为类的成员函数,双目运算符最好重载为类的友员函数。

(2)若一个运算符的操作需要修改对象的状态,选择重载为成员函数较好。

(3)若运算符的操作数(尤其是第一个操作数)希望有隐式类型转换,则只能选用友元函数。 (4)具有对称性的运算符可能转换任意一端的运算对象,如算术、关系运算符等,通常重载为非成员函数。

(5)有4个运算符必须重载为类的成员函数:赋值(=)、下标([])、调用(())、成员访问箭头(->)。 15、

#include using namespace std;

class Complex{ private: double real, image; public: Complex() { real = image = 0; } Complex(double r, double i) { real = r; image = i; } void print(); friend Complex operator+(Complex c1, Complex c2); friend Complex operator-(Complex c1, Complex c2); };

void Complex::print() { if (image > 0) cout << real << \ else if (image < 0) cout << real << \ else cout << real << endl;; }

Complex operator+(Complex c1, Complex c2) { return Complex(c1.real + c2.real, c1.image + c2.image); }

Complex operator-(Complex c1, Complex c2) { return Complex(c1.real - c2.real, c1.image - c2.image); }

int main(void)

博学谷——让IT教学更简单,让IT学习更有效 { }

Complex c1(2, 3), c2(4, 5); Complex c; c = c1 + c2; c.print(); c = c1 - c2; c.print();

system(\return 0;

第五章题目

一、填空题

1、声明模板的关键字是,定义模板形参的关键字是。 2、C++中的模板可分为和。 3、已知:

int sum(int n){return n+n;} double sum(double n){return n+n;}

是两个函数模板的实例,则该函数模板的定义为。 4、函数模板实例化后是,类模板实例化后。 二、选择题

5、下列关于函数模板的描述中,错误的是()

A、函数模板必须由程序员实例化为可执行的模板函数 B、函数模板的实例化由编绎器实现 C、函数模板是一个可以直接使用的函数 D、函数模板的模板形参不能为空 6、有函数模板定义如下: template

Max(T a, T b, T& c){c = a + b ;} 则下列调用中正确的是() A、int x, y; char z; Max(x, y, z); B、double x, y,x; Max(x, y, z); C、int x, y; flaot z; Max(x, y, z); D、float x, double y, z; Max(x, y, z); 7、类模板的实例化()。 A、在编译时进行 B、属于动态联编 C、在运行时进行 D、在链接时进行

8、下列有关模板和继承的叙述,正确的是 ()


C++课后习题(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:夏令营开营仪式学生代表发言

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

马上注册会员

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