Dzień dobry, uczę się obiektówki z kursów Pana Zelenta i zaciąłem się przy odc. 5 - dziedziczeniu.
Do rzeczy - Pan Zelent stworzył klasę Kolo, dziedziczącą z klasy Punkt. Następnie stworzył konstruktor:
Kolo(string nk="Kolko", string np="S", float a=0, float b=0, float pr=1)
:Punkt(np,a,b)
{
nazwa = nk;
r = pr;
}
I nie za bardzo rozumiem, skoro samemu konstruktorowi przypisuje się już wartości domyślne, to po co jeszcze podczepiać pod to konstruktor Punkt(np,a,b)? Z tego co sprawdziłem, to to podczepienie nic nie daje, bo tak czy siak MUSZĘ zadać jakieś wartości domyślne dla Kolo, inaczej kompilator krzyczy, że nie ma poprawnego konstruktora. (a wartości z Punkt(np,a,b) jakby wcale nie brały żadnego udziału)
I mam jeszcze jeden problem - chciałem dodać możliwość wpisywania własnych wartości - dla punktu wszystko działa - ale dla koło zapisuje tylko r i swoją nazwę, natomiast nie wczytuje wcześniej utworzonego punktu(czyta wartości domyślne) - i co z tym zrobić?
Podrzucam swój kod, może ktoś z Was mi pomoże to ogarnąć..
obiekty.h
#include <iostream>
using namespace std;
class Punkt
{
float x, y;
string name;
public:
Punkt(string = "A", float a = 0, float b = 0);
//void wczytaj();
void wyswietl();
~Punkt();
};
class Kolo :Punkt
{
float r;
string name;
public:
Kolo(string np, float a, float b, float rr = 1, string nk = "Kolko");
//void wczytaj();
void wyswietl();
~Kolo();
};
obiekty.cpp
#define _USE_MATH_DEFINES
#include <iostream>
#include <string>
#include "obiekty.h"
#include <cmath>
using namespace std;
Punkt::Punkt(string n, float a, float b) {
name = n;
x = a;
y = b;
}
Punkt::~Punkt()
{
}
void Punkt::wyswietl(){
cout << endl << "Punkt " << name << "(" << x << "," << y << ")";
}
//void Punkt::wczytaj() {
// cout << endl << "Podaj x: ";
// cin >> x;
// cout << endl << "Podaj y: ";
// cin >> y;
// cout << endl << "Podaj nazwe: ";
// cin >> name;
//}
Kolo::Kolo(string np, float a, float b, float rr, string nk)
:Punkt(np, a, b) {
name = nk;
r = rr;
}
void Kolo::wyswietl() {
cout << endl << "Kolo " << name << " o promieniu " << r << " w punkcie ";
Punkt::wyswietl();
cout << endl << "ma pole rowne: " << M_PI*r*r;
}
Kolo::~Kolo()
{
}
//void Kolo::wczytaj() {
// cout << endl << "Podaj r: ";
// cin >> r;
// cout << endl << "Podaj nazwe: ";
// cin >> name;
//}
main.cpp
#include <iostream>
#include <cstdio>
#include "obiekty.h"
using namespace std;
int main(void) {
Punkt p1;
//p1.wczytaj();
p1.wyswietl();
Kolo k1;
//k1.wczytaj();
k1.wyswietl();
getchar();
return 0;
}
Będę bardzo wdzięczny za kilka słów wyjaśnienia i uwagi dot. moich kodów.
Pozdrawiam.