C++课后习题 联系客服

发布时间 : 星期二 文章C++课后习题更新完毕开始阅读9e4230dc0b4e767f5acfcedc

博学谷——让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、下列有关模板和继承的叙述,正确的是 ()

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

A、模板和继承都可以派生出一个类系

B、从类系的成员看,模板类系的成员比继承类系的成员较为稳定 C、从动态性能看, 继承类系比模板类系具有更多的动态特性

D、相同类模板的不同实例一般没有联系,而派生类各种类之间有兄弟父子等关系 三、判断题

9、对函数模板而言不存在add(int, int)这样的调用,不能在函数调用的参数中指定模板形参的类型。

10、函数模板的实例化是在声明时期进行的。

11、函数模板实例化出的多个具体函数是重载函数,但模板本身不能被重载。

12、使用类模板时,必须要为模板形参显式指定实参,不存在实参推演过程,也就是说不存

在将整型值10推演为int类型传递给模板形参,必须要在<>中指定int类型,这一点与函数模板不同。 四、简答题

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

#include using namespace std;

template T total(T *p) { T sum = 0; while (*p) { sum += *p++; } return sum; }

int main() { int x[] = { 1, 3, 5, 7, 9, 0, 13, 15, 17 }; cout << total(x); system(\ return 0; }

14、请简述一下使用函数模板时应该注意哪些问题。

15、编写一个使用类模板对数组进行排序、查找和求元素和的程序。

1)设计一个类模板templateclass Array,用于对T类型的数组进行排序、查找和求元素和;

2)然后由此产生模板类Array和Array

第五章答案

1、template

typename/class