刚碰到一个问题 解决了 来问问大家有没有朋友过这样的情况

微笑明明 2010-12-27 03:20:26
就是:在类中又定义了其他类
比如
class A
{
int a;
void funA (void){printf("fun of A\n");}
class B
{
//调用funA
int b;
void funB (void){("fun of B\n");}
}
}

我要在类B中调用类A的函数funA, 应该怎么调?(我用了15分钟才解决)
这个不是继承 类B是类A的成员类

另外我想请问下高手:这样写有什么好处啊?
...全文
191 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Ada-Wong 2010-12-27
  • 打赏
  • 举报
回复
感觉用友元应该可以吧,不行的话将A中的函数public
(纯属个人见解)
ryfdizuo 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 akirya 的回复:]
传A* + 成员函数指针。
[/Quote]
++
nickowen 2010-12-27
  • 打赏
  • 举报
回复
说实话,你写个这代码出来.耗无意义...funA 和 funB的关联都没体现出来
嵌套类用途通常都是封装低层实现...不象外围类以外的暴露实现...
你这funB很可能会被funA调到... 当然,没把具体代码发出来,我只是猜.

个人觉得这种封装用途的可读性不强.如果只是为了代码少点或显的有技术含量当我没说
还不如直接写个桥接模式
jebe7282 2010-12-27
  • 打赏
  • 举报
回复
好处就是。成员类可以访问到类的私有成员。。
不必将其它成员设置成public 。又能达到隐藏的目的。
  • 打赏
  • 举报
回复
没碰到过,学习!
  • 打赏
  • 举报
回复
传A* + 成员函数指针。
龙哥依旧 2010-12-27
  • 打赏
  • 举报
回复
嵌套类啊!
s_hhm 2010-12-27
  • 打赏
  • 举报
回复
我的理解是类A对象包含类B。类B里的任何函数和成员都只有类A的对象去访问。不能直接去创建类B对象。只能在创建类A对象时间接创建类B对象。等同于在类A中又封装了一个类(就是一些数据和方法且这些数据只能被自己访问)(个人理解,不知道是不是这样。)
微笑明明 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jackyjkchen 的回复:]

建议楼主不要这样。

跟着最直观最正常的流程走。
[/Quote]
这不是我想写成这样的
是GOOGLE的android的audio的FRAMEWORK框架写成这样
我要把FM纳入管理 只能在原先的烂框架上做修改

8楼给出的正确答案 必须用boj 分给你一半 还有一半给说出这样写有什么好处的人 要让大家信服才可以啊
luciferisnotsatan 2010-12-27
  • 打赏
  • 举报
回复
记错了。内部的类可以调到外部类的private,但外部调不到内部的private

void funB (void){A obj;obj.funA();} //ok


void funA (void){B obj;obj.funB();} //error: cannot access private member declared in class 'A::B'
nicklisir 2010-12-27
  • 打赏
  • 举报
回复
用友元类就可以咯
luciferisnotsatan 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pur_e 的回复:]

我觉得这样写只是给B加了一层包装吧,就和命名空间似的

B中要调用A的函数,就和B不在A中声明然后用A的函数是一样的,A的函数除非声明为static,要不然都是thiscall,不能调用的

这样写一般是有一个类B只有A会用它的对象,封装起来的吧

我的理解是这样
[/Quote]
+1

而且lz给出的代码全是 private下的,又没有friend
jackyjkchen 2010-12-27
  • 打赏
  • 举报
回复
建议楼主不要这样。

跟着最直观最正常的流程走。

微笑明明 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 q191201771 的回复:]

static就能调吧
[/Quote]

不用static怎么调?
这样的情况是这样 比如别人原来写的不是static
你把人家的再写成static那就全乱了
微笑明明 2010-12-27
  • 打赏
  • 举报
回复
楼上的小萌萌说的满好的

我想的和你一样

只是在B类中用this指针 指的其实是B类的地址
就想叫yoko 2010-12-27
  • 打赏
  • 举报
回复
static就能调吧
pur_e 2010-12-27
  • 打赏
  • 举报
回复
我觉得这样写只是给B加了一层包装吧,就和命名空间似的

B中要调用A的函数,就和B不在A中声明然后用A的函数是一样的,A的函数除非声明为static,要不然都是thiscall,不能调用的

这样写一般是有一个类B只有A会用它的对象,封装起来的吧

我的理解是这样

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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