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
.