嵌套类的问题

lovec 2001-12-25 03:54:33
#include<iostream.h>

class One {
int k;
public:
One(int f=0):k(f){
cout<<k<<endl;
}
int Getk(){return k;}
class Inner {
int k;
One one1;
public:
Inner(int j=10):k(j){
cout<<k<<endl;
}
SetE(int j) {this->k=j;cout<<this->k<<endl;}
SetP(int j) {one1.k=j;cout<<one1.k<<endl;}
}inner;
};
int main()
{
One one(12);
one.inner.SetP(1200);
one.inner.SetE(100);
return 0;
}
在嵌套类中如何访问他的上一级类中的成员!!请大虾多多赐教!
...全文
103 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lovec 2001-12-28
  • 打赏
  • 举报
回复
to:lightning(lightning) 
也许我描述的确实有问题。
inner确实是one的成员,你对,不过关于上级、下级问题就和向上兼容、向下兼容一样,这个到现在还是迷糊^_^,关键大家能够通过程序表达相同的思想,那种语言的障碍在这里没有了,是吧?真正的达到那种心灵的交流^_^
还有hz129(孤星古雨)的建议我在机器上调试过,还可以,是我想要的结果,其实只要只要这个解决了,举一反三,其他的访问都可以解决的,不过这让我想到了容器的实现,感觉和这个相似,只是更加复杂了!
还有,就是没有分可加了,实在抱歉:)
lovec 2001-12-26
  • 打赏
  • 举报
回复
哈,非常感谢hz129(孤星古雨),估计因该没有问题,看来我得C++水平实在龌龊,高手啊,希望以后遇到难题请多多指教!这次分就这么多了!还有就是虽然tita(tita)和lightning(lightning)的建议不是我想要得,可是非常感谢他们的仁义之心:)
lightning 2001-12-26
  • 打赏
  • 举报
回复
"我实在下一级中访问上一级的不是上级访问下级 "

我想你的理解不对.one.inner中的inner成员本质上是one的成员,并不是你所想的one的上级.
p.s
如果你要认为inner 是one 的上级, hz129(孤星古雨)的code我认为应改为在inner中定义one -type的成员,在one 中保存 innter对象的指针.
tita 2001-12-25
  • 打赏
  • 举报
回复
用One::k访问吧
hz129 2001-12-25
  • 打赏
  • 举报
回复
这样应该可以了吧

#include<iostream.h>

class One {
int k;
public:
One(int f=0):k(f),inner(this) {
cout<<k<<endl;
}
int Getk(){return k;}

class Inner {
int k;
One *one1;
public:
Inner(One *p, int j=10):one1(p),k(j){
cout<<k<<endl;
}
void SetE(int j) {this->k=j;cout<<this->k<<endl;}
void SetP(int j) {one1->k=j;cout<<one1->k<<endl;}
} inner;

friend class Inner;
};

int main()
{
One one(12);
one.inner.SetP(1200);
one.inner.SetE(100);
return 0;
}
lovec 2001-12-25
  • 打赏
  • 举报
回复
ha ,我在Inner中加入One* one1指针,结果不是Core Dump 就是结果不对!
注,我实在下一级中访问上一级的不是上级访问下级
lightning 2001-12-25
  • 打赏
  • 举报
回复
访问上一级成员,必需要能直接或间接得到上一级对象的指针.否则不可能.
你可以在one中保存一个指向inner的指针

lovec 2001-12-25
  • 打赏
  • 举报
回复
to lightning(lightning) 
问题好像不是出在那里的,关键我不知道如何在嵌套类中访问他的上级成员!
lightning 2001-12-25
  • 打赏
  • 举报
回复
'One one(12);
one.inner.SetP(1200);
one.inner.SetE(100);
"
根本就没有inner对象存在,如何访问

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧