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.需要初始化引用成员的数据
自己做的时候遇到很多不懂的问题,都是问囧阳的,小白进步中,感谢阳神!感谢耐心!