Skocz do zawartości

Metoda Obiektu i jej zwracanie


LyanVu

Rekomendowane odpowiedzi

Otóż najpierw pokażę wam kod:

 

consoler.h :

 

#include <string>

const int cmax_Strony = 500;

class Ksiazka
{
private:
string m_strTytul;
string m_strStrony[cmax_Strony];
int m_nIloscStron;
public:
Ksiazka(string strTytul, int nIloscStron) { m_strTytul = strTytul; m_nIloscStron = nIloscStron; }
Ksiazka() { m_strStrony[0] = "Eloszka.", m_strStrony[1] = " blablablabla"; }

string GetTytul() { return m_strTytul; }
string GetStrona(int nStrona) { return m_strStrony[nStrona]; }
int GetIloscStron() { return m_nIloscStron; }
};

 

main.cpp :

#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <string>
#include "consoler.h"

using namespace std;


int main()
{
string strTytul;
int nIloscStron;
int nWpisStrona = true;

cout << "Podaj Tytul Ksiazki: ";
cin >> strTytul;
cout << endl << "Podaj Ilosc Stron: ";
cin >> nIloscStron;

system("cls");

Ksiazka oKsiazka1(strTytul, nIloscStron);


while (nWpisStrona>0 && nWpisStrona<3)
{
	cout << "Tytul Twojej Ksiazki: " << oKsiazka1.GetTytul();
	cout << endl;
	cout << "Ilosc jej stron: " << oKsiazka1.GetIloscStron();
	cout << endl;
	cout << "Podaj Strone, ktora chcesz przeczytac: ";
	cin >> nWpisStrona;
	cout << endl;

	cout << oKsiazka1.GetStrona(nWpisStrona - 1);
	cout << endl;
	_getch();
}
_getch();

}

 

 

Problem polega na tym, iż nie wyswietla mi zadnej z dwóch opisanych przeze mnie stron czyli "eloszka" i "blablabla". Wie Ktos o co chodzi? Dodam iż programowania obiektowego zacząłem się uczyć dopiero 1-2 godz temu, więc bez dziwienia jeżeli jest to trochę nagmatwane ;p

Odnośnik do komentarza
Udostępnij na innych stronach

Nie sprawdzałem działania tego kodu, ale na pierwszy rzut oka widać, że masz przeciążenia konstruktora: jeden z dwoma argumentami przypisujący wartości polom Tytuł i Ilość stron, a drugi bez argumentów przypisujący dwóm pierwszym stronom wartości. Obiekt tworzysz z przeciążenia z argumentami, automatycznie nie masz nic przypisywane do dwóch wspomnianych wyżej zmiennych, bo to przeciążenie tego nie wykonuje. Nic dziwnego zatem, że nic Ci nie zwraca/wyświetla.

 

Ogólnie, dziwny ten kod trochę, wg. mnie.

Jeżeli dopiero uczysz się obiektowego, to zacznij sobie od najprostszych operacji na tych obiektach, żeby dobrze ogarnąć co i jak.

Odnośnik do komentarza
Udostępnij na innych stronach

Dobra już działa, przerzuciłem przypisanie tych stringów(eloszka) do wyższego konstruktora. Widocznie źle zrozumiałem przeciążenia, lub w ogóle ich nie rozumiem. Myślałem, że to będzie działało na zasadzie najpierw wykona pierwszy konstruktor, pozniej zajmie się drugim ;p. W każdym razie dziękuję za pomoc :)

Odnośnik do komentarza
Udostępnij na innych stronach

po czesci dobrze myslales - to zadziala tylko z konstruktorami bez parametrow, te z parametrami trzeba explicite wywolac w konstruktorze klasy dziedziczacej:

class A

{

A(int v)

{

value = v;

}

int value;

};

 

class B : public A

{

B()

{

A(10);

}

};

Odnośnik do komentarza
Udostępnij na innych stronach

po czesci dobrze myslales - to zadziala tylko z konstruktorami bez parametrow, te z parametrami trzeba explicite wywolac w konstruktorze klasy dziedziczacej:

class A

{

A(int v)

{

value = v;

}

int value;

};

 

class B : public A

{

B()

{

A(10);

}

};

O Borze... :)

 

class A
{
A(int v)
{
value = v;
}
int value;
};

class B : public A
{
B()
: A(10)
{
}
};

Twój kod YXE tworzy nową instancję klasy A, sorry bro.

Odnośnik do komentarza
Udostępnij na innych stronach

pardon, masz racje - wywolanie konstruktora rodzica powinno znalezc sie w liscie inicjalizacyjnej :P

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...