从另一个对象启动方法的对象的方法

时间:2018-09-27 18:59:28

标签: c++ class reference

我在我的 classA.cpp

在A类中,有一种方法:

doSomething ()

好吧,现在,我在我的 main.cpp 中,并且正在从类A创建对象,并且我可以使用此类的方法并且它可以工作。

A a1;
a1.doSomething ()

现在我在我的 ClassB.cpp 中 我希望在这里可以创建这样的方法:

orderA ()
{
   a1.doSomething ()
}

但是,当然不能,因为ClassB不知道对象。我告诉自己,在创建ClassB时,我可以将其传递给对象(a1)的引用。但是我不知道怎么做。我不明白如何在classB.h等中定义object(a1)的类型。有人可以向我解释吗?

最后,我希望在main.cpp中创建一个ClassB对象并执行以下操作:

B b1;
b1.orderA;

感谢您的帮助:)

4 个答案:

答案 0 :(得分:2)

您可以通过....通过引用来传递引用。这是一个玩具示例:

struct A {
    void doSomething() {}
};

struct B {
    void doSomethingWithA(A& a) {
        a.doSomething();
    }
};

int main() {
   A a;
   a.doSomething();
   B b;
   b.doSomethingWithA(a);
}

PS:建议的读数:here

答案 1 :(得分:2)

如果您要询问引用的语法

orderA (A& a1)
{
   a1.doSomething ();
}

和您的main.cpp

A a1;
B b1;
b1.orderA(a1);

答案 2 :(得分:0)

带有类的示例:

class A
{
   public:
       void doSomething(){}
};

class B{
    A &ref;
  public:
     B(A& r):ref{r} /// c++03 or before ref(r)
     {
     }
    void orderA ()
     {
         ref.doSomething();
     }
};


int main()
{
   A a1;
   B b(a1);
   b.orderA();
   ...
   return 0;
}

答案 3 :(得分:0)

ClassA.h

#ifndef CLASS_A_INCLUDED  // include-guard to prevent
#define CLASS_A_INCLUDED  // multiple inclusion of the header

class A {
public:
    void doSomething();
};

#endif /* CLASS_A_INCLUDED */

ClassA.cpp

#include "ClassA.h"

void A::doSomething()
{}

ClassB.h

#ifndef CLASS_B_INCLUDED
#define CLASS_B_INCLUDED

#include "ClassA.h"  // incude the declaration of ClassA
                     // so that members of ClassA can be used.

class B {
private:
    A &a1;  // declare the member a1 as
            // reference to an object of type ClassA
public:
    B(A &a);  // add a constructor that takes a reference
              // to an object of type ClassA
    void orderA();
};
#endif /* CLASS_B_INCLUDED */

ClassB.cpp

#include "ClassB.h"

B::B(A &a)
: a1{ a }  // use the initializer list of the constructor
           // to initialize the reference a1
{}

void B::orderA()
{
    a1.doSomething;  // call a method on the object referenced by a1
}

main.cpp

#include "ClassA.h"
#include "ClassB.h"

int main()
{
    A a1;
    a1.doSomething();

    B b1{ a1 };  // pass the object a1 to the constructor of B
    b1.orderA();
}