c++ przeciążanie obiektów, klasa zaprzyjaźniona, figury geometryczne

0

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ść”

1

To gdzie jest pytanie?

0

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ść”

1

Co już zrobiłeś (pokaz kod) i z czym masz problem. Jesli próbowałeś i się nie udało, też pokaż

0
    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;}
};
0
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.

0

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()'|

0
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.

0
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?

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