C++ Primer 第五版 中文版 练习 13.14&13.15&14.16&14.17 个人code

来源:互联网 发布:王宏安 软件所 编辑:程序博客网 时间:2024/06/03 18:53

C++ Primer 第五版 中文版 练习 13.14&13.15&14.16&14.17 

练习 13.14:假定numbered是一个类,它有一个默认构造函数,能为每个对象生成一个唯一的序号,保存在名为mysn的数据成员中。

假定numbered使用合成拷贝控制成员,并给定如下函数:

void f(numbered s) { std::cout << s.mysn << std::endl; }

则下面代码输出什么内容??

numbered a,b=a,c=b;

f(a);f(b);f(c);

答:输出一样的内容,都为a对象的mysn的值。

练习 13.15:假定numbered定义一个拷贝构造函数,能生成一个新的序号。

这会改变上题中调用的输出结果吗?如果会改变,为什么?新的输出结果是什么?

答:不会改变输出结果,输出一样的内容,都为对象的mysn的值。

练习13.16:如果f中的参数是const numbered &,将会怎样?这会改变输出结果吗?如果会改变,为什么?新的输出结果是什么?

答:不会改变输出结果。

练习 13.17:分别编写前三题中所描述的 numbered 和 f ,验证你是否正确预测了输出结果。

答:

#include <iostream>#include <algorithm>class numbered{public://练习 13.14假设这就是默认构造函数……用rand来生成唯一的序号。预测输出结果是一样的都是a的mysn值numbered():mysn(rand()){}//拷贝构造函数,练习 13.15 这上依然不会改变输出结果,一样的都是a的mysn值numbered(const numbered &num) :mysn(num.mysn){}//为了方便输出声明为publicint mysn;};//练习13.14中的函数void f(numbered s) { std::cout << s.mysn << std::endl; }//练习13.16中的函数 不会改变输出结果,一样都是a的输出结果。void f(const numbered &s) { std::cout << s.mysn << std::endl; }using namespace std;int main(){numbered a, b = a, c = b;f(a);f(b);f(c);return 0;}
输出结果总是一样的:



0 0
原创粉丝点击