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

Jak jest bardziej poprawnie?

VPS Starter Arubacloud
0 głosów
121 wizyt
pytanie zadane 20 kwietnia 2019 w C i C++ przez szymon1051 Nowicjusz (120 p.)

 

O klasach wiem tyle że są składnią podobne do struktur i tyle :).

 

Jak jest bardziej poprawnie?

#include <iostream>

using namespace std;

void drukuj(float  r, float  t)
{cout<<r<<" "<<t<<endl;
};

class Tcomplex
{
 private:
  float Re;
  float Im;
  
  
public:  
  
void przypisz(float Re, float Im) 
{ this->Re = Re; this->Im = Im; };



void suma(Tcomplex a, Tcomplex b)
{
     Tcomplex suma;
     suma.Re = a.Re + b.Re;
     suma.Im = a.Im + b.Im;
     cout<<"Suma: ";
     drukuj(suma.Re,suma.Im);
     };
     
void iloczyn(Tcomplex a, Tcomplex b)
{
	Tcomplex iloczyn;
     iloczyn.Re = (a.Re * b.Re - a.Im * b.Im);
     iloczyn.Im = (a.Re * b.Im + a.Im * b.Re);
     cout<<"Iloczyn ";
     drukuj(iloczyn.Re,iloczyn.Im);
     };
     
};     

int main()
{
  Tcomplex a, b;
  float c,d;
  cout<<"Podaj liczbe: "<<endl;
  cin>>c;
  cin>>d;
	a.przypisz(c,d);
	  cout<<"Podaj liczbe: "<<endl;
  cin>>c;
  cin>>d;
	b.przypisz(c,d);
	a.suma(a,b);
	a.iloczyn(a,b);
    getchar();
    getchar();
    return 0;
      
};

czy

#include <iostream>

using namespace std;

void drukuj(float  r, float  t)
{cout<<r<<" "<<t<<endl;
};

class Tcomplex
{
 private:
  float Re;
  float Im;
  
  
public:  
  
void przypisz(float Re, float Im) 
{ this->Re = Re; this->Im = Im; };



void suma(Tcomplex a, Tcomplex b)
{
float suma_Re = a.Re + b.Re;
float suma_Im = a.Im + b.Im;
cout<<"Suma: ";
     drukuj(suma_Re,suma_Im);
     };
     
     
     void iloczyn(Tcomplex a, Tcomplex b)
{

     float iloczyn_Re = (a.Re * b.Re - a.Im * b.Im);
     float iloczyn_Im = (a.Re * b.Im + a.Im * b.Re);
     cout<<"Iloczyn ";
     drukuj(iloczyn_Re,iloczyn_Im);
     };
};
     

int main()
{
  Tcomplex a, b;
  float c,d;
  cout<<"Podaj liczbe: "<<endl;
  cin>>c;
  cin>>d;
	a.przypisz(c,d);
	  cout<<"Podaj liczbe: "<<endl;
  cin>>c;
  cin>>d;
	b.przypisz(c,d);
	a.suma(a,b);
	a.iloczyn(a,b);
    getchar();
    getchar();
    return 0;
      
};

 

1
komentarz 20 kwietnia 2019 przez Secrus Nałogowiec (32,880 p.)
Gdzie jest różnica w kodzie, bo nie widzę? PS poczytaj trochę o formatowaniu kodu, bo to co masz woła o pomstę do nieba
komentarz 20 kwietnia 2019 przez szymon1051 Nowicjusz (120 p.)
W jednym w sumie i iloczynie tworze nowy obiekt a w innym proste zmienne do których przypisuje wartości.

 

Formatowanie kodu? Co masz na myśli wyciąganie ciała funkcji po za klasę?
komentarz 20 kwietnia 2019 przez Secrus Nałogowiec (32,880 p.)
Jeżeli o to chodzi, to w pełni poprawnie należałoby przeciążyć operatory. po drugie, jeśli tworzysz metodę dla klasy, to wykorzystuj obiekt, który już masz, czyli jak masz suma(), to powinna przyjmować jeden argument, obiekt, który dodajesz do obiektu, który już masz.

Co do formatowania, to chodzi o odpowiednie wcięcia w kodzie, umieszczanie klamer według jednej konwencji... ogólnie o to jak kod wygląda.
komentarz 20 kwietnia 2019 przez Dawid Markiewicz Obywatel (1,590 p.)
edycja 20 kwietnia 2019 przez Dawid Markiewicz

na końcu definicji funkcji nie dodajesz średników ';'

jeśli piszesz definicję w 'header file' to z automatu tworzysz funkcje inline wiec dłuższe funkcje pisz w pliku cpp

nie nazywaj argumentów formalnych tak samo jak składowych klasy bo się połapać nie da Re = Re <- wtf

1 odpowiedź

0 głosów
odpowiedź 20 kwietnia 2019 przez Dawid Markiewicz Obywatel (1,590 p.)

Ja bym to tak napisał dałem kilka rozwiązań których możesz nie zrozumieć wiec dałem je w komentarzach i napisałem prostsze pod spodem sory ze podzieliłem to na pliki, ale nie mogłem rozczytać nic z tego kodu

#include "pch.h"
#include <iostream>

int main()
{
	float c, d;
	cout << "Podaj liczbe: " << endl;
	cin >> c;
	cin >> d;
	Tcomplex a(c, d);
	cout << "Podaj liczbe: " << endl;
	cin >> c;
	cin >> d;
	Tcomplex b(c, d);
	a.suma(a, b);
	a.iloczyn(a, b);
	getchar();
	getchar();
	return 0;
};
#ifndef PCH_H
#define PCH_H
#include <iostream>

using namespace std;

void drukuj(float  r, float  t);

class Tcomplex
{
private:
	float Re;
	float Im;
public:
	Tcomplex();
	Tcomplex(double x, double y);
	void suma(Tcomplex a, Tcomplex b);
	//const Tcomplex operator+(const Tcomplex a) const; //lepiej przeciazyc operator i pisac pozniej obiekt = obiekt + obiekt
	void iloczyn(Tcomplex a, Tcomplex b);
	//const Tcomplex operator*(const Tcomplex a) const; // a tu byloby obiekt = obiekt * obiekt;
	//friend ostream& operator<<(ostream& os, const Tcomplex& ob); // a to moze byc zamiast drukuj piszesz wtedy normalnie cout<<obiekt;
};

#endif //PCH_H
#include "pch.h"

void drukuj(float r, float t)
{
	cout << r << " " << t << endl;
}

Tcomplex::Tcomplex()
//	:Re(0), Im(0) //mozy byc tak jak usuniesz to co w nawiasie
{
	Re = 0;
	Im = 0;
}

Tcomplex::Tcomplex(double x, double y)
	//:Re(x), Im(y)			//lista inicjalizacyjna moze byc tak lub tak jak nawiasach
{
	Re = x;
	Im = y;			
}

void Tcomplex::suma(Tcomplex a, Tcomplex b) //tu powinny byc przeciazone operatory
{
	*this = Tcomplex(a.Re + b.Re, a.Im + b.Im);
}

//const Tcomplex Tcomplex::operator+(const Tcomplex a) const 
//{
//	return Tcomplex(Re + a.Re, Im + a.Im);
//}

void Tcomplex::iloczyn(Tcomplex a, Tcomplex b) //tu tak samo
{
	*this = Tcomplex(a.Re * b.Re - a.Im * b.Im, a.Re * b.Im + a.Im * b.Re);
}

//const Tcomplex Tcomplex::operator*(const Tcomplex a) const
//{
//	return Tcomplex(Re*a.Re, Im*a.Im);
//}

//ostream& operator<<(ostream& os, const Tcomplex& ob)
//{
//	os << ob.Re << " " << ob.Im;
//	return os;
//}

 

Podobne pytania

–1 głos
3 odpowiedzi 418 wizyt
pytanie zadane 23 grudnia 2016 w C i C++ przez Wittano Początkujący (450 p.)
0 głosów
3 odpowiedzi 540 wizyt

92,454 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...