原题:
填空,按要求输出
#include <iostream>
using namespace std;
struct A
{
int v;
A(int vv):v(vv) { }
// 在此处补充你的代码
};
int main()
{
const A a(10);
const A * p = a.getPointer();
cout << p->v << endl;
return 0;
}
输入
无
输出
10
分析:
此处很明显是需要写出getPointer函数,使得p指向a,很容易想到利用this指针。
需要注意:
1、p是const A类型,所以getPointer的返回值要求也是const A 类型,我一开始声明返回值位A *类型,VSCode会报错。
2、const A a(10)为常量对象,只能使用构造函数、析构函数和const类型的常量成员函数(常量成员函数的意义及特性即为不能够改变对象内部属性的值,也不能调用非常量成员函数(正如郭炜老师所说,如果允许其调用非常量成员函数,就有可能改变对象内部属性的值))因此,此处的getPointer后必须加const关键字,使其成为常量成员函数。
因此我的答案为:
#include <iostream>
using namespace std;
struct A
{
int v;
A(int vv):v(vv) { }
const A* getPointer() const{
return this;
}
};
int main()
{
const A a(10);
const A * p = a.getPointer();
cout << p->v << endl;
system("pause");
return 0;
}
结果Accepted
请大神们多多指点