如何使用另一个类调用一个类中的一个方法?
我有;
class A {
public :
foo ( ) ;
};
class B {
public :
bar ( ) ;
};
在main中:
A data ; // I am creating instance of class A
data . bar ( ) ; // but, I am calling a method of another class
// how can I do that ?
注意:我找不到合适的标题。如果您有,请随时分享或编辑
答案 0 :(得分:1)
除非这两个类是相关的(通过继承)你不能这样做。
成员函数对它所属的类的实例执行某些操作
您创建了一个类A
的对象,因此您只能通过它调用A
的成员函数。
磨苹果并希望得到一个芒果奶昔,真的不会发生。
答案 1 :(得分:1)
使用公共继承:
class B {
public:
void bar();
};
class A : public B
{ };
int main() {
A a;
a.bar();
}
答案 2 :(得分:0)
我认为如果你想在AN对象上使用.bar()A必须由B继承。
答案 3 :(得分:0)
目前尚不清楚您希望data.bar()
做什么。
bar()
由于无法访问A的数据,因此bar()
无法与变量data
进行任何关联。所以,我认为,data.bar()
是不必要的,你的目标只是bar()
。
据推测,如果bar()
只是一个函数,您可以声明它static
并调用B.data()
另一个选择是你想要继承,其他人已经写过了。注意继承,并确保只有在存在is-a关系时才从B继承A,并且它满足Liskov Principle。不要仅仅因为你必须调用bar()
而从B继承。
如果你想使用B,你可以在A里面有一个B实例。阅读prefering composition over inheritance
答案 4 :(得分:0)
正如大家在答案中所说的那样。 这是个坏主意而且不可能。
你只能使用没有人真正知道它会如何表现的技巧。
您可以获取对象A的指针并将其强制转换为B。
同样唯一的用途是向其他人展示不该做的事情。
A a;
B* b = (B*)&a;
b->bar();
答案 5 :(得分:0)
我认为你应该阅读1或2个c加上书籍,并清楚地了解课程的内容以及它们的目的是什么。
一些建议:Bjarne Stroustrup的c ++编程或Bruce Eckel在c ++中的思考或在网上搜索教程。
答案 6 :(得分:0)
您可以使用函数指针。使其不是静态的唯一方法是使用模板。
class A
{
public:
void setBar(void (*B::func)(void)) { bar = func; };
void callBar() { bar(); };
private:
void(*B::bar)(void);
};
class B
{
public:
static void bar() { printf("you called bar!"); };
};
int main() {
A a;
a.setBar(B::bar);
a.callBar();
}
答案 7 :(得分:0)
您也可以将班级B
声明为班级friend
的{{1}}。
我相信它的语法是:
A
但有了这个,我相信你只能在class A {
public:
foo();
friend class B;
};
class B {
public:
bar();
};
函数中使用A
中的函数/变量。
继承可能是你更好的方法。
答案 8 :(得分:-1)
虽然这个问题很奇怪!,但这里有一些解决方案 使用继承
class A: public B
输入
A data;
((B*)&data)->bar();
或重新解释演员
B* b = reinterpret_cast <B*> (&data);
b->bar();
如果bar()使用B的任何成员变量,则结果不可预测。