您的位置:首页 > 编程语言 > C语言/C++

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

2014-10-05 10:42 519 查看
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){}

//为了方便输出声明为public
int 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;
}
输出结果总是一样的:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: