返回信息流#include<iostream>
using namespace std;
class A
{
public:
A(){a = 3;}
void print(){cout<<a;}
private:
int a;
};
现在有一个这样的头文件,包含了上述类声明及定义
问你如果在不改动该头文件的情况下,来改变A一个对象的a数据成员
这是一条镜像帖。来源:北邮人论坛 / soft-design / #22493同步于 2007/11/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
一个有意思的问题
Lynus
2007/11/27镜像同步15 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
sf
【 在 Lynus (爱生活,爱Linux) 的大作中提到: 】
: class A
: {
: public:
: ...................
刚才试了一下,不行。。。。
看来OOP还是没学好。。。羞愧飘走~~~
【 在 Lynus (爱生活,爱Linux) 的大作中提到: 】
: class A
: {
: public:
: ...................
【 在 Quake 的大作中提到: 】
: 我觉得我回答的方法已经很够用了
#include <iostream>
using namespace std;
class A
{
public:
A(){a = 3;}
void print(){cout<<a;}
private:
int a;
};
int main()
{
A x;
int *p=(int *)&x;
*p=7;
x.print();
return 0;
}
确实与编译器内部的对象内存模型有关,不过一般编译器的话,私有数据成员都是放在对象最开始的吧。
至于重载<<运行符,好像不行。因为<<左边和右边的类型都已经定了,ostream已经重载了<<,cout<<a只会调用ostream中的那个。而且cout和a都是变量而不是指针或者引用,所以也不能用多态来解决。