PDA

Tam Sürümünü Görmek İçin : Planet sinifindan Mars sinifi turetemiyorum.neden?


Lewissi
22/09/2005, 23:09
#include<iostream>
#include<cstring>
using namespace std;
using std::string;
class Planet{
private:int moons;
double dist_sun;
double diameter;
double mass;
public:
Planet(int,double,double,double);
~Planet();
void show();
};
Planet::Planet(int a, double b,double c,double d){
moons=a;
dist_sun=b;
diameter=c;
mass=d;
}
Planet::~Planet(){
}
void Planet::show(){
cout<<moons<<endl<<dist_sun<<endl<<diameter<<endl<<mass<<endl;
}
class Mars:public Planet{
private:
string color;
public:
Mars(int,double,double,double,string);
~Mars();
};
Mars::Mars(int e,double f,double g,double h,string cl):moons(e),dist_sun(f),diameter(g),mass(h)
{
color=cl;
}
Mars::~Mars(){
}
Mars::show()
{
Planet::show();
cout<<color<<endl;
}
int main()
{
Mars ebe(1,12.1,40.2,21.3,"red");
ebe.show();
return 0;
}


acehreli
23/09/2005, 00:03
Oncelikle, gonderdiginiz kodlarin basina koseli parantezler icinde code, sonuna da yine koseli parantezler icinde /code yazarsaniz; kodunuzun girinti duzeni korunmus oluyor. (Son 3 mektubunuzu o sekilde duzelttim.) Yani soyle:

[ code ]
int main(){}
[ /code ]

Not: Ama, yukaridaki koseli parantezlerin icinde biraktigim bosluk karakterlerini yazmayin tabii; ben burada yazi olarak ciksinlar diye oyle yaptim.

Soruya gelince...

1) Himmm... Bunu onceki bir sorunuz icin de soylemistim; tekrarliyorum: <cstring> degil, <string> basligini eklemeniz gerekiyor.

2) "using namespace std;" dedikten sonra bir daha "using std::string;" demeye gerek yok; ama zarari da yok.

3) Bunu da daha once soylemistim; yine tekrarlayarak: Mars'ta olmayan ogeleri ilkdeger listesinde kuramazsiniz. soyle yapmaniz gerekiyor:


Mars::Mars(int e,double f,double g,double h,string cl)
:
Planet(e, f, g,h)
{
color=cl;
}


4) Mars::show() islevinin taniminda donus tUrU unutulmus. Planet'ten anladigima gore 'void' olmasi gerekiyor:


void Mars::show()
{
/* ... */
}


5) Mars'in show adinda bir islevi yok; Mars'in tanimina onun bildiriminin de eklenmesi gerekiyor:


class Mars:public Planet{
/* ... */
public:
/* ... */
void show();
};


6) Eger coksekillilik (polymorphism) denemesi ise, show islevinin kuramsal (virtual) olmasi gerekir; ama programinizin bu halinde oyle olmasi gerekmiyor. Tabii show kuramsal ise, bozucunun oyle olmasi da hararetle onerilir :)


class Planet{
/* ... */
public:
/* ... */
virtual ~Planet();
virtual void show();
};


Ali