• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przeciążenie operatorów c++

Object Storage Arubacloud
0 głosów
1,377 wizyt
pytanie zadane 2 kwietnia 2016 w C i C++ przez GameFreak Początkujący (450 p.)

Witam

Potrzebuje zrobić mnożenie dwóch wektorów. Nie mam pojęcia jak zwrócić nowy wektor. Prosiłbym o pomoc. Mam problem w miejscu:

Wektor Wektor::operator* (Wektor const& a)
{
	return Wektor(this->wektor * a.wektor);
}

Oczywiscie musze zrobic takze mnozenie wektora razy macierz ale najpierw chce zajac sie wektorami.

Z gory dzieki za pomoc

 

 Z góry dzięki.

 

plik.cpp

#include <iostream>
#include <string>
#include <cstdlib>
#include "macierze_wektory.h"

using namespace std;

void Wektor::Wczytaj_Wektor()
{
	fstream plik;
	plik.open("wektor.txt");
	if (!plik.good())
	{
		cout << "Nie udalo sie otworzyc pliku";
		system("pause");
		exit(0);
	}

	for (int i = 0; i < 4; i++)
		plik >> wektor[i];

	plik.close();
}

void Macierz::Wczytaj_Macierz()
{
	fstream plik;
	plik.open("macierz.txt");
	if (!plik.good())
	{
		cout << "Nie udalo sie otworzyc pliku";
		system("pause");
		exit(0);
	}

	for (int j = 0; j < 4; j++)
	for (int i = 0; i < 4; i++)
		plik >> macierz[i][j];

	plik.close();
}

Wektor Wektor::operator* (Wektor const& a)
{
	return Wektor(this->wektor * a.wektor);
}

plik.h

#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>

using namespace std;

class Macierz;

class Wektor
{
private:
	double wektor[4];

public:
	Wektor()
	{
		for (int i = 0; i < 4; i++)
			this->wektor[i] = 0;
	}
	void Wczytaj_Wektor();
	Wektor operator*(const Wektor &a);
};

class Macierz
{
private:
	double macierz[4][4];

public:
	Macierz()
	{
		for (int j = 0; j < 4; j++)
			for (int i = 0; i < 4; i++)
				this->macierz[i][j] = 0;
	}
	void Wczytaj_Macierz();
};



main.cpp

#include <iostream>
#include <string>
#include <cstdlib>
#include "macierze_wektory.h"

using namespace std;

int main()
{
	Wektor w1;
	w1.Wczytaj_Wektor();
	Wektor w2;
	w2.Wczytaj_Wektor();
	Wektor w3 = w1*w2;

	system("pause");
	return 0;
}

 

3 odpowiedzi

+1 głos
odpowiedź 2 kwietnia 2016 przez Dubgron Mądrala (5,620 p.)

Po pierwsze, aby tego dokonać powinieneś zmienić zmienną double wektor[4] na public lub stworzyć metodę, która będzie zwracała jej wartość, by można było wykorzystać ją w innych klasach czy funkcjach. Pod drugie, tablic nie można mnożyć tak po prostu przez siebie, tylko należy mnożyć pojedyncze elementy przez inne. Spróbuj z takim kodem.

Wektor Wektor::operator* (Wektor const& a) {

Wektor v;

for (int i = 0; i < 4; i++)
    v.wektor[i] = wektor[i] * a.wektor[i];

return v;
}

Jak nie zadziała to pisz. Pozdrawiam.

PS Polecam nazywać zmienne i klasy po angielsku, to dobra praktyka :)

+1 głos
odpowiedź 2 kwietnia 2016 przez criss Mędrzec (172,590 p.)
Zwrócić.. Zwracasz dobrze. Ale próbujesz mnożyć wskaźnik przez wskaźnik czyli w sumie nie wiem co zrobić i przekazać wynik mnożenia do konstruktora Wektor. Z tym że Wektor nie ma zdefiniowanego konstruktora, który przyjmował by jakiekolwiek argumenty.

Przemnóż po kolei każdy z elementów tablicy obu Wektorow (bo pewnie o to ci chodzilo), a potem w jakis sposób stwórz vector z przemnożonymi wartościami. Jak to zrobisz już zależy od ciebie.
0 głosów
odpowiedź 2 kwietnia 2016 przez GameFreak Początkujący (450 p.)
Dzieki za pomoc. Już działa .

Pozdrawiam !!!!

Podobne pytania

0 głosów
0 odpowiedzi 170 wizyt
0 głosów
1 odpowiedź 214 wizyt
0 głosów
1 odpowiedź 462 wizyt

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,962 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...