C++构造函数默认值使用及不新增方法修改成员实现指定输出
修改C++代码实现输出变更
问题描述
现有一段C++代码,希望控制台先输出10,再输出25,但目前两次输出都是10。要求在指定位置添加一行代码,且不新增成员方法,请问应该添加什么代码?
代码如下:
#include <iostream> using namespace std; class person { int age; public: person(int a = 10) : age(a) {} int get_age() const; }; int person::get_age() const { return age; } int main() { person p1; cout << p1.get_age() << endl; // should print 10 //insert code here cout << p1.get_age() << endl; // should print 25 return 0; }
解决方案
在指定位置添加以下代码即可实现需求:
*reinterpret_cast<int*>(&p1) = 25;
原理说明
由于person类仅包含一个私有成员int age,且没有虚函数等会改变内存布局的元素,对象p1的起始内存地址就对应成员age的存储地址。通过reinterpret_cast将p1的地址强制转换为int*类型,就能直接修改age的值,从而让第二次输出变为25。
另外还有一种等价写法:
*(const_cast<int*>(&static_cast<const int&>(p1))) = 25;
内容的提问来源于stack exchange,提问作者R053
相关产品推荐
相关产品推荐

