Czy przy liście inicjalizacyjnej musi podawać wszystkie atrybuty klasy poprzedniej? Popatrzmy na taki kod
#include <iostream>
#include <math.h>
using namespace std;
class Punkt
{
protected:
float x,y;
private:
string nazwa;
public:
void wyswietl()
{
cout<<nazwa<<"("<<x<<","<<y<<")"<<endl;
}
Punkt(string n="S", float a=0, float b=0)
{
nazwa = n;
x = a;
y = b;
}
};
class Kolo :public Punkt //klasa Kolo dziedziczy publicznie z klasy Punkt
{
protected:
float r;
private:
string nazwa;
public:
void wyswietl()
{
cout<<"Kolo o nazwie: "<<nazwa<<endl;
cout<<"Srodek kola: "<<endl;
Punkt::wyswietl();
cout<<"Promien: "<<r<<endl;
cout<<"Pole kola : "<<M_PI*r*r<<endl;
}
Kolo(string nk="Kolko", string np="S", float a=0, float b=0, float pr=1)
:Punkt(np,a,b)
{
nazwa = nk;
r = pr;
}
};
class Kula :public Kolo{
float z;
string nazwa;
public:
void wyswietl(){
cout << "Kula o nazwie: " << nazwa << endl;
cout << "Srodek kuli: ";
cout << "(" << x << ", " << y << ", " << z << ")" << endl;
cout << endl << "Promien: " << r << endl;
cout << "Objetosc kuli: " << (4.0/3.0) * M_PI * r * r * r << endl;
}
Kula(string nku = "Kula", string npk = "S", float xx = 0, float yy = 0, float zz = 0, float prku = 1)
//lista inicjalizacyjna
:Kolo(nku, npk, xx, yy, prku)
{
nazwa = nku;
z = zz;
r = prku;
}
};
int main()
{
Kula k1;
k1.wyswietl();
return 0;
}
Dlaczego tutaj Pan Mirosław powiedział, że musimy użyć listy inicjalizacyjnej
:Kolo(nku, npk, xx, yy, prku)
Jeżeli nie będę używał atrybuty nku?