【至急!】クラスの練習をしています。疑問です!もし
同スーパークラスから継承させた2つのサブクラスをつくりました。
ひとつのサブクラスをインスタンス化し、そのサブクラス内でもう片方のサブクラスをインスタンス化して、
まるでインスタンスが(別の)新しいインスタンスを作るようにしてみることを考えました。
ところが、以下の条件下しか作れないようです。なぜですか?
・継承元が同スーパークラスではないクラス。
・main関数内。
また、もし作れるならどのようにしたらいいでしょうか?
※C++の練習なのでcharを使っています。
#include <stdio.h>
#include <cstring>
#include <cstdlib>
#include <ctime>
class Ningen {
protected:
char Name[255];
public:
///////////////////////
char *ReturnName(void){
return Name;
}
///////////////////////
};
//人間____名前をもち、与えられた名前を返す能力がある
class Player : public Ningen {
public:
Player(void){
printf("____What's your name?:");
scanf("%s", Name);
}
};
//人間____Ningenを継承、名前をユーザにきいて名前を入力させる能力がある
class Salesman : public Ningen {
public:
Salesman(const char *str){
strcpy(Name, str);//Name = str;
printf("%s\n",Name);
}
};
//人間____Ningenを継承、名前を引数で入手して表示する能力がある
class Build {
protected:
char BuildingName[255];
};
//建物____Buildという場所をクラスで用意。ここで人オブジェクトが動く。
class Company : public Build{
public:
Company(const char *str){
strcpy(BuildingName, str);//BuildingName = str;
printf("%s\n",BuildingName);
}
};
//建物____Buildを継承、名前を引数で入手して表示する能力がある
int main(void){
Player *Player_p;//____プレイヤーのポインターを宣言
Player_p = new Player;//____インスタンスを生成してそれを代入
printf("____Are you name?:%s\n", Player_p -> ReturnName());
Company *Company_p;
Company_p = new Company("____SystemConsultingCompany");
Salesman *Salesman_p;
Salesman_p = new Salesman("____MINAMI");
delete Salesman_p;
delete Company_p;
delete Player_p;
}