Dana jest klasa „prostokat”
class prostokat
{protected:
int a;
int b;
public:
prostokat(int A, int B): a(A), b(B){}
int obwod() {return 2a+2b;}
int pole() {return ab;}
};
1.Należy przeciążyć dla tej klasy następujące operatory:
a.„ ” w wersji obiekt * skalar–mnoży boki prostokąta przez liczbę
b.„++”zwiększa długości obu boków o 1
c.„==” sprawdza, czy boki prostokąta mają te same długości
2.Należy napisać funkcję zaprzyjaźniona z klasą „prostokat”, która zamieni ze sobą wartości pól „a” i „b”
3.Należy stworzyć klasę o nazwie „ostroslup” pochodną od klasy „prostokat”. Będzie ona opisywała ostrosłup prosty o podstawie prostokąta. Klasa powinna zawierać:
a.Nowy konstruktor
b.Zmodyfikowaną metodę „pole” ( w tym przypadku będzie to pole powierzchni całkowitej)
c.Metodę „objętość”
- Rejestracja:prawie 5 lat
- Ostatnio:prawie 5 lat
- Postów:8
- Rejestracja:prawie 5 lat
- Ostatnio:prawie 5 lat
- Postów:8
1.Należy przeciążyć dla tej klasy następujące operatory:
a.„ ” w wersji obiekt * skalar–mnoży boki prostokąta przez liczbę
b.„++”zwiększa długości obu boków o 1
c.„==” sprawdza, czy boki prostokąta mają te same długości
2.Należy napisać funkcję zaprzyjaźniona z klasą „prostokat”, która zamieni ze sobą wartości pól „a” i „b”
3.Należy stworzyć klasę o nazwie „ostroslup” pochodną od klasy „prostokat”. Będzie ona opisywała ostrosłup prosty o podstawie prostokąta. Klasa powinna zawierać:
a.Nowy konstruktor
b.Zmodyfikowaną metodę „pole” ( w tym przypadku będzie to pole powierzchni całkowitej)
c.Metodę „objętość”
- Rejestracja:ponad 6 lat
- Ostatnio:około 20 godzin
- Postów:3561
Co już zrobiłeś (pokaz kod) i z czym masz problem. Jesli próbowałeś i się nie udało, też pokaż
- Rejestracja:prawie 5 lat
- Ostatnio:prawie 5 lat
- Postów:8
protected:
int a;
int b;
public:
prostokat(int A, int B): a(A), b(B){}
int obwod() {return 2*a+2*b;}
int pole() {return a*b;}
friend void zmienaib(prostokat &p);
};
void zmienaib(prostokat &p){
int temp = p.a;
p.a = p.b;
p.b = temp;
}
class ostroslup: public prostokat
{
protected:
int a;
int b;
int h;
public:
ostroslup(int A, int B, int H): a(A), b(B), h(H){}
int obwod() {return 2*a+2*b;}
int pole() {return a*a+2*a*h;}
int objetosc() {return (1/3)*a*a*h;}
};

- Rejestracja:ponad 6 lat
- Ostatnio:około 20 godzin
- Postów:3561
Hesos napisał(a):
3.Należy stworzyć klasę o nazwie „ostroslup” pochodną od klasy „prostokat”. Będzie ona opisywała ostrosłup prosty o podstawie prostokąta. Klasa powinna zawierać:
Dziedziczenie obiektowe jest symulacją relacji życiowej "jest", np jabłko JEST owocem, Cat is Animal.
Ostrosłup **nie jest **prostokątem. Gratulacje dla prowadzącego.
Nadmierne użycie dziedziczenia, przecinanie go to częsty błąd edukacji i poczatkujacych
To da się przechrzcić w kompozycję, zawieranie, czyli słówko "ma" lub "używa". Ostrosłup (z tego zadania) MA podstawę prostokątną. Czy przekonasz gościa na kryształowej wieży .. nie powiem.
- Rejestracja:ponad 6 lat
- Ostatnio:około 20 godzin
- Postów:3561
Hesos napisał(a):
i wywala błąd przy ostroslup(int A, int B, int H): a(A), b(B), h(H){}
o tresci |error: no matching function for call to 'prostokat::prostokat()'|
Twoje dziedziczenie prostokąt -> ostrosłup (pomijając fundamentalną moją niezgodę na sam fakt) zrobiłeś jakby a,b nie było, ale one są w dziedziczonej klasie, nie należy ich drugi raz deklarować. Są protected, więc dla drugiej klasy są dostępne.
Z niezrozumienia dziedziczenia masz błąd, masz wywołać dwuargumentowy konstruktor klasy nadrzędnej, i własnoręcznie zainicjować tylko c.
- Rejestracja:prawie 5 lat
- Ostatnio:prawie 5 lat
- Postów:8
AnyKtokolwiek napisał(a):
Hesos napisał(a):
i wywala błąd przy ostroslup(int A, int B, int H): a(A), b(B), h(H){}
o tresci |error: no matching function for call to 'prostokat::prostokat()'|Twoje dziedziczenie prostokąt -> ostrosłup (pomijając fundamentalną moją niezgodę na sam fakt) zrobiłeś jakby a,b nie było, ale one są w dziedziczonej klasie. Są protected, więc dla drugiej klasy są dostępne.
Z niezrozumienia dziedziczenia masz błąd, masz wywołać dwuargumentowy konstruktor klasy nadrzędnej, i własnoręcznie zainicjować c.
czyli usunąć to a i b z protected?