Podstawy programowania obiektowego

0

Uczę się programowania obiektowego, i chciałbym się dowiedzieć czy dobrze rozumiem składnie klas. Powiedzmy że chciałbym napisać klasę reprezentującą książkę:

class Cksiazka
{
	//Specyfikatory dostepu
	private:
		
		unsigned m_liczbastron;
		string m_tytul;
		string m_autor;
		FORMAT m_format;
		
	public:
		//Kostruktor
		
		ksiazka(unsigned liczbastron, string tytul, string autor, FORMAT format) { m_liczbastron=liczbastron; m_tytul=tytul; m_autor=autor; m_format=format;}
		//Metody
		void Czytaj(); 
		void Informacje_O_ksiazce() { //wypisanie danych prywatnych}
		//Destruktor
		
		~ksiazka();
 
};
 

Czy mój tok myślenia jest w porządku ? Jeszcze takie pytanko odnośnie destruktora, w którym momencie usunie on obiekt?

0
  1. Gdzie jest definicja typu FORMAT?
  2. Możesz napisać string m_tytul i inne po przecinkach.

Poza tym ok ale zaopatrz się w jakąś ksiazke np. Symfonia C++ Standard.
Nazwe konstruktora zmien taka jak nazwe klasy z ksiazka na CKsiazka a destruktor uruchomi sie automatycznie mozesz to sprawdzic wpisujac mu w srodku tak:

 { cout << "Dziala destruktor"; }
0

Trochę pytanie nie na miejscu, ale gdzie powinienem wstawić definicję typu FORMAT?

0
hieronim343 napisał(a):

Trochę pytanie nie na miejscu, ale gdzie powinienem wstawić definicję typu FORMAT?

Jak to gdzie? Wg. tego co podałeś FORMAT jest typem utworzonym przez Ciebie. Definicje musisz więc napisać osobno, w osobnej klasie (czy czego potrzebujesz użyć).
Co do konstruktora, to zapoznaj się z listą inicjalizacyjną, jest lepsza, szybsza i wygodniejsza.

0
enum FORMAT { A3, A4, A5};



class Cksiazka
{
	//Specyfikatory dostepu
	private:
		
		unsigned m_liczbastron;
		string m_tytul,m_autor;
		FORMAT m_format;
		
	public:
		//Kostruktor
		
		Cksiazka(unsigned liczbastron, string tytul, string autor, FORMAT format) { m_liczbastron=liczbastron; m_tytul=tytul; m_autor=autor; m_format=format;}
		//Metody
		void Czytaj(); 
		void Informacje_O_ksiazce() { //wypisanie danych prywatnych}
		//Destruktor
		
		~Cksiazka();
 
};

Czy teraz kod wygląda lepiej? A i czy ktoś móglby odpowiedzieć na moje pytanie dotyczące destruktora zawarte w 1 poście? Bo nie umiem sobie z tym poradzić :D

@allocer
Co do listy inicjalizacyjnej to jeszcze się wstrzymam, ponieważ dopiero zaczynam obiektowość, ale dzięki za info, na pewno w przyszlości z tego skorzystam.

0

Wg. mnie jest okej.
A co do destruktora to tak jak pisałem powyżej...
dodaj w nim taki kod:

 {cout << "Jestem destruktorem i właśnie działam" << endl;} 

nastepnie w main stwórz obiekt swojej klasy i wykonaj na nim jakąś akcję. Co zaobserwujesz? Ano, destruktor uruchomi się sam w odpowiednim momencie co będzie oznaczone właśnie takim napisem: "Jestem destruktorem i właśnie działam".

Pozdrawiam.

0

Destruktor uruchamia się po zakończeniu funkcji, w której znajduje się obiekt. Jest dobrze? Mam jeszcze pytanie dotyczące pojęć a mianowicie definicja, implementacja, deklaracja i nie wiem co jeszcze pominąłem, ale chodzi mi ogólnie o pojęcia związane ze zmiennymi. Ciągle mi się to myli, jak by ktoś mógł w stanie w skrócie jednym zdaniem wyjaśnić mi to i najlepiej z króciutkim przykładem to byłbym ogromnie wdzięczny ;p

0

Deklaracja - przekazanie zmiennej nazwy.... no na chłopski rozum.
Definicja - nazwa + wartość czyli definicja jest jednocześnie deklaracją ale nie odwrotnie. Definiować możesz np klase...czyli wypełniać ją konstruktorami, metodami, polami etc. np:

class pralka{}; //deklaracja
class pralka; // lub tak nie jestem pewien ;P nie pisałem w C++ dawno

 
class pralka{
public:
int a, b;
void ustaw_wartosci(c,d); //deklaracja składowej
}; //definicja klasy

 

Implementacja - implementowanie (kodowanie, wdrażanie) jakiegoś algorytmu :-)

Przykłady:

string zwroc_stringi(string a, string b); // to jest deklaracja funkcji zwracającej typ string 
 string zwroc_stringi(string a, string b)

{
cout << a << b << endl;
} // całość to definicja funkcji. 

W C++ mam zwyczaj na początku programu (nad funkcja main) deklarować funkcje a na końcu definiować :)

0
MVC napisał(a):

W C++ mam zwyczaj na początku programu (nad funkcja main) deklarować funkcje a na końcu definiować :)

To wypadałoby zastosować nagłówki i nie pisać jednoplikowo ;P

0

Destruktor nie usuwa obiektu tylko go czyści. Gdy obiekt jest usuwany to tuż przed usunięciem wywoływany jest automatycznie destruktor. Możesz sam jawnie wywołać destruktor ale nie usuniesz nim obiektu. Zresztą zrób sobie klasę w której jest destruktor oraz obiekt tej klasy i potem wywołaj destruktor a następnie próbuj modyfikować obiekt.

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