编程作业: 编程作业—类和对象
3w6:第三周程序填空题1
描述
下面程序输出的结果是:
4,6
请填空:
#include <iostream> using namespace std; class A { int val; public: A(int n) { val = n; } int GetVal() { return val; } }; class B: public A { private: int val; public: B(int n):
// 在此处补充你的代码
{ } int GetVal() { return val; } }; int main() { B b1(2); cout << b1.GetVal() << "," << b1.A::GetVal() << endl; return 0; }
输入无输出4,6样例输入
无
样例输出
4,6
Code:
#include <iostream> using namespace std; class A { int val; public: A(int n) { val = n; } int GetVal() { return val; } }; class B: public A { private: int val; public: B(int n): // 在此处补充你的代码 A(n*3), val(n*2) {} int GetVal() { return val; } }; int main() { B b1(2); cout << b1.GetVal() << "," << b1.A::GetVal() << endl; return 0; }
3w7:第三周程序填空题2
描述
下面程序输出的结果是:
0
5
请填空:
#include <iostream> using namespace std; class A { public: int val;
// 在此处补充你的代码
}; main() { A a; cout << a.val << endl; a.GetObj() = 5; cout << a.val << endl; }
输入无输出0
5样例输入
无
样例输出
0 5
提示所缺代码具有如下形式:
A(_________________ ){ val = n; }
________________ GetObj() {
return _________________;
}
Code:
#include <iostream> using namespace std; class A { public: int val; // 在此处补充你的代码 A() { val = 0; } A(int v) { val = v; } A& GetObj() { return *this; } }; main() { A a; cout << a.val << endl; a.GetObj() = 5; cout << a.val << endl; }
3w8:第三周程序填空题3
描述
下面程序的输出是:
10
请补足Sample类的成员函数。不能增加成员变量。
#include <iostream> using namespace std; class Sample{ public: int v; Sample(int n):v(n) { }
// 在此处补充你的代码
}; int main() { Sample a(5); Sample b = a; cout << b.v; return 0; }
输入无输出10样例输入
无
样例输出
10
Code:
#include <iostream> using namespace std; class Sample{ public: int v; Sample(int n):v(n) { } // 在此处补充你的代码 Sample(Sample& s) { v = 10; } }; int main() { Sample a(5); Sample b = a; cout << b.v; return 0; }
Analysis:[https://segmentfault.com/a/1190000005852333]
在代码 Sample b = a;
中,这里的=
是初始化,而不是赋值,在用同类型的对象对对象初始化的时候会调用复制构造函数。形如Sample(Sample& s)
,以同类型的引用作为构造函数的参数的构造函数是复制构造函数。在 Sample b = a;
中,a是复制构造函数的参数,调用构造函数的对象的v的值被赋值为10。
调用复制构造函数的三种情况
1.初始化:当用一个对象去初始化同类的另一个对象时
2.函数参数:如果某函数有一个参数是类A的对象,那么该函数被调用时,类A的复制构造函数被调用
3.函数返回值:如果函数的返回值是类A的对象时,则函数返回时,A的复制构造函数被调用
3w9:第三周程序填空题4
描述
下面程序的输出结果是:
5,5
5,5
请填空:
#include <iostream> using namespace std; class Base { public: int k; Base(int n):k(n) { } }; class Big { public: int v; Base b;
// 在此处补充你的代码
}; int main() { Big a1(5); Big a2 = a1; cout << a1.v << "," << a1.b.k << endl; cout << a2.v << "," << a2.b.k << endl; return 0; }
输入无输出5,5
5,5样例输入
无
样例输出
5,5 5,5
提示所缺代码具有如下形式:
Big ________________{ }
Big ________________{ }
Code:
#include <iostream> using namespace std; class Base { public: int k; Base(int n):k(n) { } }; class Big { public: int v; Base b; // 在此处补充你的代码 Big(int a):v(a), b(a){} }; int main() { Big a1(5); Big a2 = a1; cout << a1.v << "," << a1.b.k << endl; cout << a2.v << "," << a2.b.k << endl; return 0; }
Analysis: [https://segmentfault.com/a/1190000005852395]
Big
类是一个封闭类,在生成Big
类对象之前,会先生成Base
类的对象(调用Base
类的构造函数生成Big
类的成员对象b
),然后再调用Big
类的构造函数,生成Big
类对象a1
.
代码Big a2 = a1;
中,调用Big
类默认的复制构造函数,以a1
为默认复制构造函数的参数,生成对象a2
.
永远渴望,大智若愚(stay hungry, stay foolish)