我的代码看起来像这样:
的main.cpp
#include <iostream>
#include "A.h"
#include "B.h"
using namespace std;
int main(){
int d,f;
A c();
d = c.GetStuff();
B *d = new C();
f = d->Get();
return 0;
}
A.H
#ifndef A_H
#define A_H
class A
{
int a;
public A();
int GetStuff() {return(a) ;}
};
#endif
A.cpp
#include "A.h"
A::A()
{
a = 42;//just some value for sake of illustration
}
B.h
#ifndef B_H
#define B_H
Class B
{
public:
virtual int Get(void) =0;
};
class C: public B {
public:
C();
int Get(void) {return(a);}
};
#endif
B.cpp
#include "B.h"
C::C() {
a // want to access this int a that occurs in A.cpp
}
我的问题是,获取B.cpp中“a”的最佳方式是什么? 我尝试使用“朋友”课,但我没有得到结果。
有什么建议吗? 谢谢!
答案 0 :(得分:0)
两个不同的答案,取决于你的意思
如果每个A对象都有自己唯一的'a'变量(这就是你定义它的方式),那么你需要将A
传递给C
的构造函数:
C::C(const A &anA) {
int foo= anA.a; //
}
并且,调用构造函数变为:
A myA;
B *myC = new C(myA); // You picked confusing names for your classes and objects
但是,如果您希望所有A对象共享一个共同的a
值,那么您应该在a
中将getStuff
和static
声明为A
:
class A
{
static int a;
public:
static int GetStuff() {return a;};
...并在A::GetStuff()
构造函数中将其作为C
进行访问。