Наследование
Разработать программу с использованием наследования классов, реализую-щую классы:
-----------------------> Рабочий(кем рабоатет,стаж)
Человек(имя)--------->Инженер(образование,название фирмы)
-----------------------> Старший научный сотрудник(тема научной работы)
Используя виртуальные функции, не зная с объектом какого класса вы рабо-таете, выведите на экран его характеристики.
Мое решение:
Код:
#include "stdafx.h"
#include <iostream>
using namespace std;
class Chelovek
{protected:
char* Imya ;
public:
virtual void show();};
void Chelovek :: show()
{cout<<"Imya: "<<Imya;}
class Rabochui: public Chelovek
{private:
char* Kem_rabotaet;
private:
char* Stag;
public:
Rabochui();
void show();};
Rabochui::Rabochui()
{Chelovek ::Imya = "Gena";
Kem_rabotaet = "Mexanik";
Stag = "12 let:";}
void Rabochui:: show()
{Rabochui :: show();
cout<<"\nKem_rabotaet: "<<Kem_rabotaet;
cout<<"\nStag: "<<Stag;
cout<<endl;}
class Ingener : public Chelovek
{private:
char* Obrazovanie;
char* Nazvanie_firmu;
public:
Ingener();
void virtual show();};
Ingener::Ingener()
{Chelovek::Imya = "Peta";
Obrazovanie = "Vicshee";
Nazvanie_firmu = "Zelcom:";}
void Ingener:: show()
{Chelovek::show();
cout<<"\nObrazovanie: "<<Obrazovanie;
cout<<"\nNazvanie_firmu: "<<Nazvanie_firmu;
cout<<endl;}
class Naych_cotrydnik: public Chelovek
{private:
char* Tema;
public:
Naych_cotrydnik();
void show();};
Naych_cotrydnik::Naych_cotrydnik()
{Chelovek::Imya = "Vova";
Tema = "fizika";}
void Naych_cotrydnik:: show()
{Chelovek ::show();
cout<<"\nTema: "<<Tema;
cout<<endl;}
void main()
{ Rabochui k;
cout<<"Rabochui:\n";
k.show();
cout<<endl;
Ingener l;
cout<<"Ingener:\n";
l.show();
cout<<endl;
Naych_cotrydnik m;
cout<<"Naych_cotrydnik:\n";
m.show();
cout<<endl;}
#include <iostream>
using namespace std;
class Chelovek
{protected:
char* Imya ;
public:
virtual void show();};
void Chelovek :: show()
{cout<<"Imya: "<<Imya;}
class Rabochui: public Chelovek
{private:
char* Kem_rabotaet;
private:
char* Stag;
public:
Rabochui();
void show();};
Rabochui::Rabochui()
{Chelovek ::Imya = "Gena";
Kem_rabotaet = "Mexanik";
Stag = "12 let:";}
void Rabochui:: show()
{Rabochui :: show();
cout<<"\nKem_rabotaet: "<<Kem_rabotaet;
cout<<"\nStag: "<<Stag;
cout<<endl;}
class Ingener : public Chelovek
{private:
char* Obrazovanie;
char* Nazvanie_firmu;
public:
Ingener();
void virtual show();};
Ingener::Ingener()
{Chelovek::Imya = "Peta";
Obrazovanie = "Vicshee";
Nazvanie_firmu = "Zelcom:";}
void Ingener:: show()
{Chelovek::show();
cout<<"\nObrazovanie: "<<Obrazovanie;
cout<<"\nNazvanie_firmu: "<<Nazvanie_firmu;
cout<<endl;}
class Naych_cotrydnik: public Chelovek
{private:
char* Tema;
public:
Naych_cotrydnik();
void show();};
Naych_cotrydnik::Naych_cotrydnik()
{Chelovek::Imya = "Vova";
Tema = "fizika";}
void Naych_cotrydnik:: show()
{Chelovek ::show();
cout<<"\nTema: "<<Tema;
cout<<endl;}
void main()
{ Rabochui k;
cout<<"Rabochui:\n";
k.show();
cout<<endl;
Ingener l;
cout<<"Ingener:\n";
l.show();
cout<<endl;
Naych_cotrydnik m;
cout<<"Naych_cotrydnik:\n";
m.show();
cout<<endl;}
Ну прежде всего я бы посоветовал заменить char * на std::string или char [N]. Ну и разобраться с виртуальными функциями.
Код:
Rabochui::show();
Код:
Chelovek::show();
Код:
// ...
#include <cstring>
// ...
Rabochui::Rabochui()
{
Imya = new char[10]; // думаю можно без "Chelovek::", т.к. все равно наследуется из базового класса
strcpy(Imya, "Gena");
Kem_rabotaet = new char[10];
strcpy(Kem_rabotaet, "Mexanik");
Stag = new char[10];
strcpy(Stag, "12 let:");
}
#include <cstring>
// ...
Rabochui::Rabochui()
{
Imya = new char[10]; // думаю можно без "Chelovek::", т.к. все равно наследуется из базового класса
strcpy(Imya, "Gena");
Kem_rabotaet = new char[10];
strcpy(Kem_rabotaet, "Mexanik");
Stag = new char[10];
strcpy(Stag, "12 let:");
}
Можно еще, как уже сказал nikitozz, использовать объекты string:
Код:
// ...
#include <string>
// ...
class Chelovek
{protected:
string Imya ;
// ...
};
// ...
class Rabochui: public Chelovek
{private:
string Kem_rabotaet;
string Stag;
// ...
};
//...
#include <string>
// ...
class Chelovek
{protected:
string Imya ;
// ...
};
// ...
class Rabochui: public Chelovek
{private:
string Kem_rabotaet;
string Stag;
// ...
};
//...
И тогда присваивание в конструкторах можно оставить без изменений.
Спасибо всем,программа заработала!:)Надо было поменять как сказал koodeer