我在我的 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;
感谢您的帮助:)
答案 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();
}