dziedziczenie C++

0

Witam. Mam problem z dziedziczeniem i bardzo proszę o pomoc. Utworzyłam klasę Wektor:


class Wektor
{
private:
	unsigned int _n;
	float * _W;

public:
	Wektor(unsigned int n);
	void Wczytaj();
	void Wypisz();

};

Następnie utworzyłam klasę Macierz, która dziedziczy z klasy Wektor:


#include "wektor.h"

class Macierz : Wektor
{
private:
	unsigned int _m;
	unsigned int _n;
	float ** _A;
public:
	Macierz(unsigned int n, unsigned int m);
	Macierz Transponuj();
	Macierz MnozRazySkalar(float skalar);
	Macierz operator+(const Macierz & M1);
	Macierz operator-(const Macierz & M1);
	Macierz operator=(const Macierz & M1);
	Macierz operator*(const Macierz & M2);
	Macierz(const Wektor & W);
	void Wczytaj();
	void Wypisz();
	
};

W poniższej funkcji chciałam przemnożyć macierze przez wektor, ale pojawiają się błędy i nie mam pojęcia dlaczego:/


void WymnozMacierzePrzezWektor(Macierz &M1, Macierz &M2)
{
	int n;
	cout << " Podaj liczba elementow wektora: ";
	cin >> n;

	Macierz W(n);
	
  	W.Wektor::Wczytaj();
	W.Wektor::Wypisz();
	
	char wybor;
	cout << "wymnoz przez wektor macierze: ( 1->M1 / 2->M2 / 3->obie): ";
	cin >> wybor;
	switch (wybor)
{
		case '1':
			
			M1 = M1*W; 
			break;
		default:
			cout << endl;
			return;
	}
	cout << endl;
	return;
}

0

A może mam coś nie tak z plikami nagłówkowymi? Pomóżcie;)

0

Jak podasz jakie błędy tobie kompilator wypisuje, to szybciej uzyskasz pomoc.

PS. Używaj edycji zamiast pisać post jeden pod drugim.

0

Macierz nie jest specjalnym przypadkiem wektora!!!

0

error C2011: 'Wektor' : 'class' type redefinition

error C2027: use of undefined type 'Wektor'

error C2011: 'Wektor' : 'class' type redefinition

0

Powiem szczerze, że to dziedziczenie wprowadziłam trochę na siłę, bo projekt tego wymaga.

0

Masz prawdopodobnie namieszane z includami, ale tych nie zamieściłeś. Nie wiem jak inni, ale ja wróżenie z kuli robię odpłatnie.

0

Przepraszam za zamieszanie. Już wszystko zamieszczam:

wektor.cpp:


#include <iostream>
#include <cmath>
#include "wektor.h"
#include <cstdlib> //exit
#include <cfloat> //FLT_MIN

macierzz.h

#include "wektor.h" 

macierzz.cpp

#include <iostream>
#include <cmath>
#include "macierzz.h"
#include "wektor.h"
#include <cstdlib> //exit
#include <cfloat> //FLT_MIN

main.cpp

#include <iostream>
#include <fstream>
#include "macierzz.h"
#include "wektor.h"
1

Ta, ale wektor to prędzej specjalny przypadek macierzy, ew. macierz zawiera n wektorów, więc na logikę masz albo odwrotne dziedziczenie, albo zawieranie.
Idąc w przyszłość: przypadku dziedziczenia masz jeden problem: pojawi się się pytanie "a co jak ktoś zrobi new Macierz(1,4)", czyli o rozmiarze wektora. Podpowiadam: factory method/pattern.

1
  1. Brak strażnika nagłówka.
  2. Macierz dziedzicząca z wektora to jakieś cuda na kiju.
0

Zrezygnowałam z tego dziedziczenia, bez sensu było je tam umieszczać. Dziękuję za wszystkie odpowiedzi i pomoc.

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