Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Наследование

49K
07 декабря 2009 года
dom1nator
8 / / 05.10.2009
Помогите найти ошибку,не выводит на экран данные,Задание:
Разработать программу с использованием наследования классов, реализую-щую классы:

-----------------------> Рабочий(кем рабоатет,стаж)
Человек(имя)--------->Инженер(образование,название фирмы)
-----------------------> Старший научный сотрудник(тема научной работы)



Используя виртуальные функции, не зная с объектом какого класса вы рабо-таете, выведите на экран его характеристики.

Мое решение:
Код:
#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;}
288
07 декабря 2009 года
nikitozz
1.2K / / 09.03.2007
Ну прежде всего я бы посоветовал заменить char * на std::string или char [N]. Ну и разобраться с виртуальными функциями.
297
07 декабря 2009 года
koodeer
1.2K / / 02.05.2009
В методе Rabochui::show() замените строку
 
Код:
Rabochui::show();
на строку
 
Код:
Chelovek::show();
12K
07 декабря 2009 года
Ghox
297 / / 26.07.2009
Если для хранения строковых переменных (Imya, Kem_rabotaet и т.д.) используются char-овские строки, заданные указателями char, то эти указатели перед присваиванием значения в конструкторах нужно инициализировать (например с помощью new), а потом записывать нужное значение строки по указателю, например, с использованием функции strcpy из библиотеки string.h из C:
Код:
// ...
#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;
// ...
};
//...

И тогда присваивание в конструкторах можно оставить без изменений.
49K
07 декабря 2009 года
dom1nator
8 / / 05.10.2009
Спасибо всем,программа заработала!:)Надо было поменять как сказал koodeer
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог