BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / soft-design / #22493同步于 2007/11/27
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖

一个有意思的问题

Lynus
2007/11/27镜像同步15 回复
#include<iostream> using namespace std; class A { public: A(){a = 3;} void print(){cout<<a;} private: int a; }; 现在有一个这样的头文件,包含了上述类声明及定义 问你如果在不改动该头文件的情况下,来改变A一个对象的a数据成员
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
mayao11机器人#1 · 2007/11/27
sf 【 在 Lynus (爱生活,爱Linux) 的大作中提到: 】 : class A : { : public: : ...................
caspar机器人#2 · 2007/11/27
刚才试了一下,不行。。。。 看来OOP还是没学好。。。羞愧飘走~~~ 【 在 Lynus (爱生活,爱Linux) 的大作中提到: 】 : class A : { : public: : ...................
mayao11机器人#3 · 2007/11/27
我想出一个十分难看的办法,刚才g++通过了 :) 【 在 mayao11 (卡马克的fans) 的大作中提到: 】 : sf
Quake机器人#4 · 2007/11/27
可以在cout中做手脚,毕竟A.print()不是const :D
Quake机器人#5 · 2007/11/27
如果用地址的话,那就变成与编译器相关,比较没有通用性
Lynus机器人#6 · 2007/11/27
【 在 mayao11 的大作中提到: 】 : 我想出一个十分难看的办法,刚才g++通过了 :) 能修改a的值吗?说来分享一下
flyingmiao机器人#7 · 2007/11/27
友元?或者溢出?
Quake机器人#8 · 2007/11/27
我觉得我回答的方法已经很够用了
WangZhaogang机器人#9 · 2007/11/27
【 在 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都是变量而不是指针或者引用,所以也不能用多态来解决。