Utworzenie obiektów do vectora

0

Cześć, mam pewien problem w utworzeniu vectora obiektów klasy A. Chodzi o to, że utworzyłem klasę A i klasę B, która dziedziczy po klasie A. Klasa A ma 2 zmienne (np. int X, string NAZWA). Klasa B dziedziczy oczywiście te zmienne po klasie A ale ma jeszcze swoją zmienną int Y. I problem polega na tym, że chcę w klasie C utworzyć vector obiektów klasy A, tylko chcę też żeby każdy obiekt w tym vectorze zawierał nie tylko atrybuty z klasy A ale też atrybut Y z klasy B. Czy macie jakiś pomysł jak to rozwiązać, żeby klasa A "widziała" atrybuty klasy B? Rozumiem, że dużo łatwiejszym sposobem byłoby stworzenie obiektów z klasy B, która dziedziczy po klasie A ale tak nie mogę zrobić. Będę wdzięczny za pomoc.

2

Użyj wskaźników (unique_ptr) i polimorfizmu dynamicznego, jeśli o to chodzi. Albo std::variant. Ale z opisu to mi bardziej brzmi jak szukanie problemu pod rozwiązanie, niż odwrotnie.

2

Wygląda na jakieś xy, a w jakim celu Chcesz to zrobić?

0

Chodzi o to, że mam klasę A w której są 2 atrybuty, które będą wspólne dla 3 klas pochodnych. W tych 3 pochodnych klasach jest jedna zmienna, która jest inna dla każdej z tych klas. No i chcę wrzucić do tego vectora obiekty, które będą właśnie zawierały po 2 cechy z klasy A i jedną cechę z wybranej pochodnej klasy.

1
#include <iostream>
#include <typeinfo>
#include <vector>
#include <memory>
using namespace std;

struct A
{
	int x;
	A(int x):x(x) {}
	virtual ~A() {}
};

struct B:public A
{
	int y;
	B(int x,int y):A(x),y(y) {}
};

int main()
{
	vector<shared_ptr<A>> tb {shared_ptr<A>(new B(1,666)),shared_ptr<A>(new A(2)),shared_ptr<A>(new B(3,42))};
	for(const shared_ptr<A> &p:tb)
	{
		
		cout<<p->x<<' ';
		B *b=dynamic_cast<B*>(&*p);
		if(b!=nullptr) cout<<b->y;
		else cout<<"brak";
		cout<<endl;
	}
	return 0;
}

https://ideone.com/ex4ACS

3
Zozol720 napisał(a):

Chodzi o to, że mam klasę A w której są 2 atrybuty, które będą wspólne dla 3 klas pochodnych. W tych 3 pochodnych klasach jest jedna zmienna, która jest inna dla każdej z tych klas. No i chcę wrzucić do tego vectora obiekty, które będą właśnie zawierały po 2 cechy z klasy A i jedną cechę z wybranej pochodnej klasy.

Zamiast zasypywać nas jakimiś ogółami, które pozwalają nam się tylko domyślać, że coś robisz źle, opisz problem, który ma rozwiązywać twój program.
Dopiero potem, opisz implementację kodu, który rozwiązuje ten problem.

1 użytkowników online, w tym zalogowanych: 0, gości: 1