week3
#1
描述
下面程序输出的结果是:
0
5
请填空:
1 #include <iostream>
2 using namespace std;
3 class A {
4 public:
5 int val;
6 // 在此处补充你的代码
7 };
8 main() {
9 A a;
10 cout << a.val << endl;
11 a.GetObj() = 5;
12 cout << a.val << endl;
13 }
要写一个GetObj的成员函数,他的返回值是val,而成员函数返回成员变量的值,要用int&类型作为返回值,否则返回的是val的副本
所以这样写
1 int& GetObj() { return val; }
#2
描述
下面程序的输出是:
10
请补足Sample类的成员函数。不能增加成员变量。
1 #include <iostream>
2 using namespace std;
3 class Sample{
4 public:
5 int v;
6 Sample(int n):v(n) { }
7 // 在此处补充你的代码
8 };
9 int main() {
10 Sample a(5);
11 Sample b = a;
12 cout << b.v;
13 return 0;
14 }
本来想实现调用复制构造函数时,能将v累加:新创的对象b的v能加上给他初始化的对象的v;但是新创建的对象没有v值,这种想法似乎只有赋值函数才可实现(即,已经初始化过的对象),所以放弃之,写成这样(但自己感觉不妥):
1 Sample(const Sample& n)
2 {
3 v = 2*n.v;
4 }
#3
描述
下面程序的输出结果是:
5,5
5,5
请填空:
1 #include <iostream>
2 using namespace std;
3 class Base {
4 public:
5 int k;
6 Base(int n):k(n) { }
7 };
8 class Big {
9 public:
10 int v; Base b;
11 // 在此处补充你的代码
12 };
13 int main() {
14 Big a1(5); Big a2 = a1;
15 cout << a1.v << "," << a1.b.k << endl;
16 cout << a2.v << "," << a2.b.k << endl;
17 return 0;
18 }
由14行知这里要创建Big类的构造函数和复制构造函数
注意到Big类有数据成员Base b,于是乎,必须要用参数列表进行初始化
1 Big(int v_):v(v_), b(v_)
2 {
3 }
4
5 Big(const Big& a):v(a.v),b(a.b.k)
6 {
7 }
用参数列表初始化成员的情况(2,3不是很懂,待尝试):1.需要初始化的数据成员是类的对象;2.需要初始化cosnt修饰的类成员;3.需要初始化引用成员的数据
自己做的时候遇到很多不懂的问题,都是问囧阳的,小白进步中,感谢阳神!感谢耐心!