Zadanie z programowania obiektowego

0

Witam mam pewien problem przygotowuje się do kolosa z obiektówki i rozwiązuje zadania a raczej próbuje. Nie mogę zrozumieć jednego z nich więc proszę o pomoc oto jego Treść:
Zad. 2. Proszę zdefiniować klasę bazową oraz dwie klasy pochodne (dziedziczenie liniowe, atrybuty chronione, dziedziczone). Atrybuty klasy bazowej: łańcuch 15-elementowy, liczba całkowita – rzeczywista długość łańcucha. Metody: konstruktor (domyślne wartości – „tekst”, 5), destruktor. I klasa pochodna – metody : zapis nowej wartości, odczyt, II klasa pochodna – dodatkowo odczyt łańcucha w odwrotnej kolejności. W programie – 1 obiekt klasy I , 1 obiekt klasy II - proszę zademonstrować działanie ich metod.

Głównie nie mogę zrozumieć o co chodzi w tym miejscu prosił bym o przykład
//
Metody: konstruktor (domyślne wartości – „tekst”, 5)//

Jak mam nadać te domyślne wartości
z góry dzięki

0
class samochod
{
     void samochod(); //konstruktor
     int predkosc;
     string marka;
}

void samochod::samochod
{
    int predkosc = 5;
    string marka = "Volvo";
}
0

@this - zjeb...

class samochod
{
     samochod(); //konstruktor
     int m_v;
     string m_brand;
}

void samochod::samochod() :
     m_v(5), m_brand("Volvo")
{}
0

Nie doczytałem :/

0

ok dzięki za pomoc no oczywiście tu nie skończę na pytaniach stworzyłem teraz coś takiego

 


class bazowa
{
     int a;
     char lancuch[15]
      
      bazowa();
      ~bazowa();
      
            
      };
      
class pochodna1 : public bazowa
      {
            
            
          
            };
            
            

 class pochodna2 : public bazowa
      {
            
                  
            };
            
      
      
      void bazowa::bazowa():
           
      
      {
           a(5);
           lancuch("tekst");
           
           }
      
      
     
main()
{
      
      
system ("pause");
}


a jak mam zawrzeć teraz w pierwszej klasie pochodnej

zapis nowej wartości, odczyt,

0

Co to za main()? Jaki jest typ zwracany przez main()? Nie używaj system("pause");. Zjadło Ci include'y oraz metody. Poza tym formatowanie Ci się rozjechało. A ten konstruktor to co to w ogóle ma być? O kiedy konstruktor zwraca cokolwiek oraz co robi tam ten dwukropek? Co to za funkcja a() bo takiej nie widzę, tak samo funkcji tekst(). Naucz się kopiować cstringi.

0

No widzisz próbowałem coś sklecić z tego co mi pokazałeś w swoim przykładzie widocznie nie tak miało być, to ja już w ogóle nie rozumiem treści tego zadania czy może mnie ktoś poprawić i nakierować?

0

winerfresh: zgodnie ze standardem w C++ funkcja main() zawsze zwraca wartość typu int (nawet jeśli nie jest to jawnie podane w deklaracji / definicji). Oczywiście w dobrym stylu jest to napisać jawnie ale zapis:

main() {}

jest dla kompilatora poprawny.

0

Nie prawda - standard nie dopuszcza domyślnie zwracanej wartości jako int. Np. kompilator VC się potrafi o to pluć errorem:
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Standard jedynie definiuje, że jeżeli nie zostanie to podane jawnie, main zwróci 0 (jeżeli dobrze pamiętam)

1

Jest poprawny dla kompilatora ze względu na zgodność ze starymi wersjami C, ale nie jest on zgodny ze standardem, ze standardem są zgodne tylko 3 wersje main():
1.

int main()
int main(int argc, char* argv[])
int main(int argc, char* argv[], char* env[])

Nie ma innych zgodnych ze standardami. Oprócz tego trzeba jawnie określić wartość zwracaną przez program.

0

Racja. Mój błąd.

0
winerfresh napisał(a)

@this - zjeb...

class samochod
{
     samochod(); //konstruktor
     int m_v;
     string m_brand;
}

void samochod::samochod() :
     m_v(5), m_brand("Volvo")
{}

zadanie nie jest sprecyzowane, nigdzie nie proszono o konstruktor domyślny. Mogłoby to wyglądać również tak:

class samochod {
     samochod(int = 5, string = "Volvo"); //konstruktor
     int m_v;
     string m_brand;
}

void samochod::samochod( int _v, string _brand) :
     m_v(_v), m_brand(_brand)
{}
0

A może ktoś poprawić mi ten kod jak powinno to wyglądać i jak się zabrać za ta cześć zadania
I klasa pochodna – metody : zapis nowej wartości, odczyt,

0

Cos takiego?

#define ARRAY_SIZE 15 + 1

class base
{
protected:
char _txt[ARRAY_SIZE];
unsigned _size;

public:
	base(const char* pszText = "tekst", unsigned size = 5) : _size(size)
	{
		if(_size >= ARRAY_SIZE)
			throw std::runtime_error("String too long");

		memset(_txt, '\0', ARRAY_SIZE);
		strcpy(_txt, pszText);
	}

	~base() {}

};

class derived1 : public base
{
public:
derived1(const char* pszText = "tekst", unsigned size = 5)
: base(pszText, size) {}

	void setTekst(const char* pszText, unsigned size)
	{
		memset(_txt, '\0', ARRAY_SIZE);
		strcpy(_txt, pszText);
	}

	const char* getText() const { return _txt; }
	unsigned size() const { return _size; }

};

class derived2 : public derived1
{
public:
derived2(const char* pszText = "tekst", unsigned size = 5) : derived1(pszText, size) {}

	const char* getReverseString() const
	{
		char* pszRevTxt = new char[_size + 1];
		
		memset(pszRevTxt, '\0', _size + 1);

		for(unsigned i=0; i<=_size; i++)
			pszRevTxt[i] = _txt[_size - i];

		pszRevTxt[_size + 1] = '\0';

		return pszRevTxt;
	}

};

int main()
{
derived1 d1("testing d1", 10);
derived2 d2("testing d2", 10);

std::cout << d1.getText() << std::endl;
d1.setTekst("whaz up d2?", 11);

d2.setTekst(d1.getText(), d1.size());
std::cout << d2.getText() << std::endl;

std::cout << d2.getReverseString() << std::endl;

return EXIT_SUCCESS;

}

tylko, ze getRevText() alokuje pamiec, tak wec trzba ja zwalniac!

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