Powiedzcie,czy dobrze to rozumuje i czy kod jest poprawny
Skoro każdy kwadrat jest prostokątem,ale nie każdy prostokąt kwadratem to kwadrat jest szczególnym przypadkiem prostokąta. W związku z tym klasa kwadrat dziedziczy od klasy prostokąt.
Oto kod.Zmienne odpowiadające za pozycje oraz bok A są chronione,ponieważ cecha dotycząca pozycji jest wspólna tak samo bok jest cechą wspólną - w przypadku prostokąta boki można opisać dwoma zmiennymi (4 boki,ale 2 pary równych) a w przypadku kwadratu jedną zmienną (4 boki tej samej dlugosci),dlatego w klasie kwadratu nie trzeba definiować zmiennej odpowiedzialnej za bok.
#include <iostream>
class Rectangle
{
float sideB;
protected:
int posX,posY,sideA;
public:
Rectangle(): posX(10),posY(10){}
inline void setSides(int a,int b){sideA=a;sideB=b;}
inline float getSquare()const{return sideA*sideB;}
inline int getPosX()const{return posX;}
inline int getPosY()const{return posY;}
};
class Square: public Rectangle
{
public:
Square():Rectangle(){posX=20;posY=20;}
inline void setSide(int a){sideA=a;}
inline float getSquare()const{return sideA*sideA;}
inline int getPosX()const{return posX;}
inline int getPosY()const{return posY;}
};
int main(int argc, char *argv[])
{
Rectangle simpleRectangle;
Square simpleSquare;
float a,b;
std::cout<<"Podaj bok a prostokata: ";
std::cin >> a;
std::cout<<"Podaj bok b prostokata: ";
std::cin >> b;
simpleRectangle.setSides(a,b);
std::cout<<"Podaj bok kwadratu: ";
std::cin >> a;
simpleSquare.setSide(a);
std::cout<<"Pole prostokata na pozycji ("<<simpleRectangle.getPosX()<<","<<simpleRectangle.getPosY()<<") wynosi: "<<simpleRectangle.getSquare()<<'\n';
std::cout<<"Pole kwadratu na pozycji ("<<simpleSquare.getPosX()<<","<<simpleSquare.getPosY()<<") wynosi: "<<simpleSquare.getSquare()<<std::endl;
return 0;
}
Zmartwiło mnie to,że klasa kwadratu nie ma zadnych zmiennych dlatego pytanie kieruje do Was czy ten kod jest poprawny.