c++问题。关于调用类的对象成员的成员函数

就是说我定义了一个2各类classa{~~~~voidtest();};classb{aproblem;~~~};如何调用test函数?是b::problem.test吗... 就是说我定义了一个2各类
class a{~~~~
void test();
};
class b {
a problem;
~~~
};
如何调用 test 函数?
是b::problem.test 吗?
还有如果我的b类中 动态申请了 a类的对象
如何调用。
是b::problem【2】->test吗?、

我们是选修课 都叫自己看的,看了大半本 但是有点搞混了
展开
 我来答
藩桂花陆戌
2020-04-05 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.2万
采纳率:31%
帮助的人:1125万
展开全部
你的problem不是静态的不能通过类名调用,只能创建b类通过对象调用,而且a类的void
test()须是公有的.
#include
using
namespace
std;
class
A
{
public
:
void
test(){
cout<<"test
A";
}
static
void
stest(){
cout<<"static
test
A";
}
};
class
B
{
public:
void
test(){
a.test();
}
public
:
A
a;
static
A
sa;
};
int
main()
{
B
b;
b.test();
b.a.test();
B::sa.stest();
}
以上三种方法都正确,希望对你有用.
小林子LWL
2015-10-25 · 知道合伙人餐饮行家
小林子LWL
知道合伙人餐饮行家
采纳数:57 获赞数:16160
河南科技大学在校本科生

向TA提问 私信TA
展开全部
成员函数编译以后就是普通的函数,
比如Base的Print被改名为void Print_Base_xxxxx(Base* pBase);
那b->Print被转为Print_Base_xxxxx(NULL);

其实更激烈点的方式,比如Derived继承于Base,它实现了Print这个函数。
你在main里面调用
Derived* pDerived = NULL;
pDerived->Print;

再做一个假设,你想crack这个编译后的可执行程序。

你找个反汇编工具,看到函数调用call ptr[derived_print_xxx]类似这样一条语句,把它改为call ptr[base_print_xxx].再运行程序,你会发现调用的是Base的Print。

所以说成员函数和普通的非成员函数没有本质的区别(起码编译以后是这样),调用的方法也是一样的。
3. 编译器实现问题楼主不必深究。如果有兴趣你可以去windws mobile资源区看看ansi c++ standard,看看里面有没有对这个的实现做出具体的规定。如果c++ standard没有具体规定,那么不同的c++厂商怎么实现自己定。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
溥昌Qx
2008-10-19 · TA获得超过538个赞
知道小有建树答主
回答量:292
采纳率:0%
帮助的人:363万
展开全部
类b中的problem成员默认是protected属性,不能通过b的对象调用成员a的方法test()。可以这样做:

class b {
public:
a problem;
...
};
b obj_b;
obj_b.problem.test();
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
左_后卫
2008-10-19 · TA获得超过118个赞
知道小有建树答主
回答量:267
采纳率:0%
帮助的人:167万
展开全部
a里的成员变量还有成员函数都是私有的,没有办法在类外访问。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhunnqq
推荐于2016-06-25
知道答主
回答量:24
采纳率:0%
帮助的人:20.2万
展开全部
你的problem不是静态的不能通过类名调用,只能创建b类通过对象调用,而且a类的void test()须是公有的.
#include <iostream>

using namespace std;

class A {
public :
void test(){
cout<<"test A";
}
static void stest(){
cout<<"static test A";
}
};
class B {
public: void test(){
a.test();
}
public : A a;
static A sa;
};
int main()
{
B b;
b.test();
b.a.test();
B::sa.stest();
}
以上三种方法都正确,希望对你有用.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式