解闷的小题,复习西加加
001
考察引用
答案:
A & a, A & b
通过码
a73659346cb724c54bba9527a386d8769eaf6ccc4128d535a701c7e6bfba24db
002
在swap中,让pa指向b,让pb指向a
答案:
int * & a, int * & b
通过码
c8fafa476e80e03a6bd4c80c432655a7bbbaa48e6f32ca43e1f5036a3652a35b
003
本题考察引用
答案:
int &
通过码
6f5049b0b228ea57b097c009a73b7f7c0afa69ca7e3342cf543c552ba1d9ffc2
004
本题考察new
答案:
nullptr,
nullptr,
new int,
new int[6]
通过码
242f1c5e6121ae947705d5da3e8e62bec00813c518e95a26b87ed4699fd72449
005
答案:
private:
int y1, y2, y3, y4;
char * name;
int age, id;
double avg_y;
public:
Student()
{
name = new char[21];
}
void input()
{
char c;
char * p = name;
while ((c = getchar()) != ',')
{
*p++ = c;
}
*p = '\0';
scanf("%d,%d,%d,%d,%d, %d", &age, &id, &y1, &y2, &y3, &y4);
}
void calculate()
{
avg_y = (y1 + y2 + y3 + y4) * 1.0 / 4;
}
void output()
{
printf("%s,%d,%d,", name, age, id);
cout << avg_y;
}
通过码
464c9407fbcdb8808fdc02e3ae9ebc7b8476c58301610fc616eb026c0f637b16
006
要补充三个函数如下,abc为待定常数
// 记为函数A
Sample(int n) : v(n + a) {
}
// 记为函数B
Sample(const Sample & s) {
v = s.v + b;
}
// 记为函数C
void operator = (const Sample & s) {
v = s.v + c;
}
由于:
int main()
{
Sample a(5); //调用A
Sample b = a; //调用B
PrintAndDouble(b); //调用B(请特别注意)
Sample c = 20; //调用A
PrintAndDouble(c); //调用B
Sample d;
d = a; //调用C
cout << d.v;
return 0;
}
要满足:
5 + a + b + b = 9
20 + a + b = 22
5 + a + c = 5
得到:a = c = 0,b = 2
最终答案:
Sample() {
}
Sample(int n) : v(n){
}
Sample(const Sample & s) {
v = s.v + 2;
}
void operator = (const Sample & s) {
v = s.v;
}
通过码
70c40970ae423df5439fdf40d32c0ebb8b94f842b4be6df1ede8e0d055c8453f
007
同010题
通过码
34082975d020e746a3b8a72a2f47bc2e70e3e1de93cf19b34d777b8faf346d4a
008
本题需要重载赋值号
答案
void operator = (const char * s)
{
r = s[0] - '0';
i = s[2] - '0';
}
通过码
7fc94c32202f7862b0ebd71e944a2cdc29dbf31c793d35766cd1ba22b74fa534
009
析构时输出成员变量i
答案:
~A() {
cout << i << endl; }
通过码
4a1e1900dc494e3ea85630825f942b09cced529baa9c1b035e7f3eb7db10c93a
010
- 123是a.val的初值,故先在类A中写无参构造函数,val初始化为123
- int类型和A类型的值都可以通过A的成员函数GetObj改变成员变量val的值,所以需要一个类型转换构造函数(题目里给了一半的那个函数)
- GetObj函数的返回类型为A引用,返回的值为*this
答案
n) : val(n) {
};
A() : val(123) {
};
A & GetObj() {
return *this;
}
通过码
f6bc9dc937a4ab279f41955b10ac9339927790ac4e47357d26c61538c3499bdb
011
此题关于封闭类。Big a1(n);
需要写一个构造函数。
答案:
Big(int n) : v(n), b(n) {
};
通过码
c9ac0b1137dced3a39341bb2b97443299f2ed84c7579a739143fce8eecf70255
012
此题能判断出在考察this指针,所以轻松写下:
A * getPointer() {
return this;
}
然后考虑在哪加const(点击查看我写过的const辨析)
- 由调用时
a.getPointer()
的对象a是常对象,所以函数getPointer必须是常成员函数,故A * getPointer() ____ {
画线位置加const。 - 此时编译不过,原因是:因为a是常对象,意味着不可被改变,此时写法代表可以通过指针p来绕过a进行对对象a的成员的改写。故
_____ A * getPointer() const {
画线位置加const。 - 补充:
const A * p = a.getPointer();
中的const并不是添加第二条描述的那个const的本质原因,因为非const返回函数可以给到const变量。本质原因是getPointer函数返回的内容是this
最终答案:
const A * getPointer() const {
return this;
}
通过码
60d4f05e487c17b13023e26d2c6b3183fc52f799a48f4a39e07419f3869321a6
---------------------------- 完 ----------------------------