如何在另一个类的对象上调用一个类的函数?

时间:2012-05-27 07:05:06

标签: c++ oop class function function-call

如何使用另一个类调用一个类中的一个方法?

我有;

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 ?

注意:我找不到合适的标题。如果您有,请随时分享或编辑

9 个答案:

答案 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的任何成员变量,则结果不可预测。