Ok.
Po pierwsze: wrzucając kod na forum czy pokazując gdziekolwiek lub nawet pisząc dla siebie, zadbaj o czytelność. Podstawowa zasada - wcięcia jednakowej wielkości po każdej klamrze otwierającej, np:
Kod: Zaznacz cały
// wciecia na cztery spacje
int a = 0;
if (a > 0)
{
a -= 1;
if (a == 0)
{
std::cout << "a bylo jedynka";
}
}
Po drugie: w C++ poprawniej (i łatwiej) jest korzystać ze strumieni, tzn. std::cin, std::cout:
Kod: Zaznacz cały
#include <iostream>
...
std::cout << "jakis napis"; // do wypisywania
int a = 0;
std::cin >> a; // wczytywanie do zmiennej a
...
Po trzecie, w C++ funkcja main powinna być zapisywana w ten sposób:
Kod: Zaznacz cały
int main(void) // istnieja tez odmiany z argumentami, ale to nieco wyzszy poziom
{
return 0; // zwracanie rezultatu programu - C++ domyslnie zwraca zero, mimo wszystko warto to pisac
}
Następnie, przy deklaracji funkcji, nazywaj argumenty. Mimo że to niepotrzebne i wymaga więcej pisania, poprawia czytelność kodu:
Kod: Zaznacz cały
// tak
void suma(wektor a, wektor b);
// zamiast
void suma(wektor, wektor);
W końcu, suma() nie działa, ponieważ próbujesz w niej uzyskać dostęp do prywatnych składowych klasy. Aby tak móc tak zrobić, dodaj metody X(), Y(), Z() zwracające kolejne współrzędne wektora lub przerzuć te atrybuty (x, y, z) do części 'public:'.Napisana przez Ciebie metoda suma oblicza sumę wektorów podanych jako argumenty. Jeśli chcesz ją zachować w obecnej postaci, wystaw ją poza klasę i zwracaj wektor. Tak jak teraz stoi, zapisuje ona w wektorze, dla którego jest wywoływana, wynik dodawania dwóch innych. To rzadko przeze mnie spotykane podejście i sądzę, że niezbyt dobre. Zrobiłbym to raczej tak:
Kod: Zaznacz cały
wektor suma(wektor a,wektor b)
{
// tu sa opisane przeze mnie metody dostepu do atrybutow x, y, z
double x=a.X()+b.X();
double y=a.Y()+b.Y();
double z=a.Z()+b.Z();
return wektor(x, y, z);
}
// i w funkcji main:
int main(void)
{
wektor a(1, 2, 3);
wektor b(3, -1, 5);
wektor c = a + b; // wektor c jest równy (4, 1, 8)
}
Innym pomysłem może być zostawienie tej funkcji wewnątrz klasy i wywoływanie jej z jednym argumentem (w tym przypadku dla danego wektora - zostanie do niego dodany wektor podany jako argument):
Kod: Zaznacz cały
void wektor::suma(wektor a)
{
// tu sa opisane przeze mnie metody dostepu do atrybutow x, y, z
x += a.X();
y += a.Y();
z += a.Z();
}
// a w funkcji main:
int main(void)
{
wektor a(1, 2, 3);
wektor b(3, -1, 5);
a.suma(b); // wektor a jest równy (4, 1, 8)
}
Jeśli coś jest nie do końca jasne, pytaj śmiało