2013-03-14 7 views
-1

Мой код выглядит примерно так:член доступа класса из конструктора другого класса

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; 
} 

Ах

#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 
} 

Bh

#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? Я пробовал использовать класс «друг», но я не получаю результатов.

Любые предложения? Спасибо!

+1

В вашем коде несколько флагов, но неясно, что вы пытаетесь сделать. Как вы думаете, что делает конструктор для 'A'? –

+0

Полный код очень длинный, я пробовал отправлять только соответствующие структуры, извините, если это сбивает с толку. Конструктор для A в теории дает значение для «a», это значение, которое я хочу иметь доступ в B.cpp – user1981855

+0

Я вижу, я только немного его исправил. Надеюсь, теперь это имеет смысл. – user1981855

ответ

0

два разных ответа, в зависимости от того, что вы имеете в виду

Если каждый подразумевается объект, чтобы иметь свой собственный уникальный «а» переменной (которая, как вы определили его), то вам необходимо пройти 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 и getStuff, как static в A:

class A 
{ 
static int a; 
public: 
static int GetStuff() {return a;}; 

... и доступ к нему, как A::GetStuff() в C конструктора.

+0

Я вижу. Ваше первое предложение - это то, что мне нужно. Что, если бы я хотел, чтобы конструктор 'C' имел доступ ко всем членам класса' A'? Предполагая, что класс 'A' имеет больше объектов. – user1981855

+0

* Предполагая, что класс A имеет больше объектов * Что вы имеете в виду, и вы уверены, что понимаете терминологию, которую используете? 'A' - это класс,' A foo; 'объявляет экземпляр этого класса под названием' foo', а 'foo.a' является членом этого экземпляра. 'C' может получить доступ ко всем публичным членам' A'. Сделать его «другом» позволит ему получить доступ к частным. – Roddy

Смежные вопросы