2016-05-11 3 views
2

Так что я получил два разных классов в C++,В C++ Как использовать atribute из другого класса

#ifndef A_H 
#define A_H 

class A 
{ 
    public: 
     ... 
    private: 

     static const int MAX = 52; 

     int a_array[MAX]; 

}; 

#endif // A_H 

И я хотел бы использовать этот массив в другой класс ... Но мне было интересно, если я не могу просто вернуть массив, как мне это сделать? Я вынужден создать другой массив в классе B и скопировать его?

Это будет второй класс ...

#include "A.h" 
#ifndef B_H 
#define B_H 

class B 
{ 
    public: 
     ... 
     void createNewDeck("here would be the array, or the object I'd like to input to use the array inside"); 
    private: 

     static const int min = 5; 


     int a_array[min] 

}; 

#endif // B_H 

EDIT: Я хочу, чтобы они были разными, я хотел бы иметь метод B, который работает с массивом класса. У меня бы был метод B, который принимает некоторые значения из этого массива; что-то вроде этого, чтобы вы, ребята, могли получить мою идею.

void B::createNewDeck(const A &a){ 
    a_array[0] = a.a_array[5]; 
    a_array[3] = a.a_array[48]; 
} 

Цените свою помощь!

+0

Наследование? или, может быть, вы хотите, чтобы экземпляры A и B были разными (в этом случае передайте A по ссылке и создайте функцию geter для массива) – Raxvan

+0

@ Raxvan Я только что отредактировал, чтобы вы могли понять, что я хочу, чтобы мои два класса делали! – magalenyo

+0

Решение части вашей проблемы заключается в реализации 'int & operator [] (int index) {return a_array [index]}'. Тогда вы можете 'a_array [0] = a [5];'. В остальной части вашей проблемы я не совсем понимаю. – user4581301

ответ

1

Массив - это просто указатель на кусок данных. Но вам нужно быть предельно ясным, что вы хотите. Вы хотите скопировать данные и иметь отдельную копию для воспроизведения? Или вы хотите, чтобы второй класс имел полный доступ к оригиналу?

Вы можете вернуть указатель в функцию или сделать переменную-член доступной как общедоступной, так и через друга.

+5

Массивы не указатели. Они только распадаются на указатели. – HolyBlackCat

+0

Я только что редактировал сообщение! Но я бы хотел, чтобы массив классов A оставался закрытым, но все же получаю значения из массива A. – magalenyo

+0

_ @ JoshK_ Проблема с возвратом указателя заключается в том, что информация о размере теряется. –

0
create a method in public int Array(int index) and return the value to your desired 

like: 


class B 
{ 
    public: 

     void createNewDeck("here would be the array, or the object I'd like to input to use the array inside"); 
    private: 

     static const int min = 5; 


     int a_array[min] 

// Method to return value outside 

public: 
     int Array(int Index) 
{ 
    return Index>min ?-1:a_array[Index-1]; 
} 

}; 
0

Самый простой способ это сделать B друг A. Таким образом, B будет иметь доступ к Aprivate участник.

class B; // forward declare B to make it visible in A's scope. Important 

class A 
{ 
    private: 
     static const int MAX = 52; 

     int a_array[MAX]; 

     friend class B; // !! 
     //friend B; // if you have C++11 
}; 
+0

Oh! Я делаю это для академических целей, и мы должны реализовывать только то, что мы «узнали», поэтому мне в основном не разрешено использовать это. В этом году мы ничего не сделали с друзьями! Хотя я буду искать информацию о друзьях для самопознания! – magalenyo

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