Форум программистов, компьютерный форум CyberForum.ru

Наследование - C++

Восстановить пароль Регистрация
 
Nadinka______
1 / 1 / 0
Регистрация: 12.08.2011
Сообщений: 29
29.08.2011, 16:48     Наследование #1
Определить иерархию классов (в соответствии с вариантом – выделить базовый и производные). Реализовать классы (самостоятельно задать члены-данные и методы класса). Написать демонстрационную программу, в которой создаются объекты различных классов. Определение классов(*.h), их реализацию(*.cpp), демонстрационную программу(*.cpp) поместить в отдельные модули.
Классы - БГТУ, факультет, группа, подгруппа;
Нужна помощь!!!
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.08.2011, 16:48     Наследование
Посмотрите здесь:

C++ Наследование
Наследование C++
C++ наследование
C++ наследование
С++ Наследование C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bers
Заблокирован
29.08.2011, 17:58     Наследование #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
не нужна вам помощь, вам нужна халява
Nadinka______
1 / 1 / 0
Регистрация: 12.08.2011
Сообщений: 29
30.08.2011, 11:17  [ТС]     Наследование #3
Вот что у меня
Определение классов
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#pragma once
 
class BSTU
{
    BSTU();
    ~BSTU();
    char* getN();
    void setN(char *name_);
    void print();
 
    char *name;
};
 
class Facultet:public BSTU
{
public:
    Facultet();
    ~Facultet();
    char* getC();
    void setC(char *cafedra_);
    void print();
 
    char *cafedra;
};
 
class Grupa:public Facultet
{
public:
    Grupa();
    ~Grupa();
    int get Nom();
    void setNom(int nomber_);
    void print();
 
    int nomber;
};
 
class Podgrupa:public Grupa
{
public:
    Podgrupa();
    ~Podgrupa();
    void print;
};
BSTU.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include "StdAfx.h"
#include "classes.h"
 
BSTU::BSTU(void)
{
    name=NULL;
    std::cout<<"BSTU CONstructor!!!"<<std::endl;
}
 
BSTU::~BSTU(void)
{
    name=NULL;
    std::cout<<"BSTU DEstructor!!!"<<std::endl;
}
 
char* BSTU::getN()
{
    if (!name)
        return NULL;
    char* st;
    st=new char [strlen(name)+1];
    strcpy(st,name);
    return st;
}
 
void BSTU::setN(char *name_)
{
    if (name)
        delete name;
    name=new char [strlen(name_)+1];
    strcpy(name,name_);
}
 
void BSTU::print()
{
    std::cout<<"________________"<<std::endl;
    std::cout<<"BSTU name: "<<getN()<<std::endl;
    std::cout<<"________________"<<std::endl;
}
Facultet.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include "StdAfx.h"
#include <iostream>
#include "classes.h"
 
Facultet::Facultet(void)
{
    name=NULL;
    cafedra=NULL;
    std::cout<<"Facultet CONstructor!!!"<<std::endl;
}
 
Facultet::~Facultet(void)
{
    name=NULL;
    cafedra=NULL;
    std::cout<<"Facultet DEstructor!!!"<<std::endl;
}
 
char* Facultet::getC()
{
    if (!cafedra)
        return NULL;
    char* st;
    st=new char [strlen(cafedra)+1];
    strcpy(st,cafedra);
    return st;
}
 
void Facultet::setC(char* cafedra_)
{
    if (cafedra)
        delete cafedra;
    cafedra=new char [strlen(cafedra_)+1];
    strcpy(cafedra,cafedra_);
}
 
void Facultet::print()
{
    std::cout<<"============================="<<std::endl;
    std::cout<<"Facultet name: "<<getN()<<std::endl;
    std::cout<<"Facultet cafedra: "<<getC()<<std::endl;
    std::cout<<"============================="<<std::endl;
}
Grupa.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include "StdAfx.h"
#include <iostream>
#include "classes.h"
 
Grupa::Grupa(void)
{
    name=NULL;
    nomber=0;
    std::cout<<"Grupa CONstructor!!!"<<std::endl;
}
 
Grupa::~Grupa(void)
{
    name=NULL;
    nomber=0;
    std::cout<<"Grupa DEstructor!!!"<<std::endl;
}
 
void Grupa::setNom(int nomber_)
{
    nomber=nomber_;
}
 
int Grupa::getNom()
{
    return nomber;
}
 
void Grupa::print()
{
    std::cout<<"============================="<<std::endl;
    std::cout<<"Grupa name: "<<getN()<<std::endl;
    std::cout<<"Grupa nomber: "<<getNom()<<std::endl;
    std::cout<<"============================="<<std::endl;
}
Podgrupa.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "StdAfx.h"
#include "classes.h"
 
Podgrupa::Podgrupa(void)
{
    nomber=0;
    std::cout<<"Podgrupa CONstructor!!!"<<std::endl;
}
 
Podgrupa::~Podgrupa(void)
{
    number=0;
    std::cout<<"Podgrupa DEstructor!!!"<<std::endl;
}
 
void Podgrupa::print()
{
    std::cout<<"============================="<<std::endl;
    std::cout<<"Podgrupa nomber: "<<getNom()<<std::endl;
    std::cout<<"============================="<<std::endl;
}
Сама программа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// Task_2.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <iostream>
#include "classes.h"
 
 
using namespace std;
 
void main()
{
    BSTU a;
    Facultet b;
    Grupa c;
    Podgrupa d;
 
    a.setN("Belorussian State Technological University");
    a.print();
 
    b.setN("IDIP");
    b.setC("ISiT");
    b.print();
 
    c.setN("ISiT");
    c.setN(1);
    c.print();
 
    d.setNom(2);
    d.print();
 
    system("pause");
 
}
Выдает кучу ошибок!!
Помогите, не знаю в чем проблема
LosAngeles
Заблокирован
30.08.2011, 11:34     Наследование #4
да ну какое же тут наследование. Обычное агрегирование. Ну как можно унаследовать так? У тебя факультет является университетом, группа является и факультетом и университетом соответсвенно, ну и подгруппа является всем вышеперечисленным. Бред. В обратную сторону тоже нельзя ничего унаследовать. Можно ввести ещё классы, типа University, AbstractGroup и тд и от них как то наследоваться. И ещё ты используешь char* вместо string...

Добавлено через 1 минуту
и ещё забыл добавить не пиши транслитом в своих программах
silent_1991
30.08.2011, 11:46
  #5

Не по теме:

LosAngeles, да это ещё что, зачастую преподы просят, чтобы машина была колесом, а здание - фундаментом...

Nadinka______
1 / 1 / 0
Регистрация: 12.08.2011
Сообщений: 29
30.08.2011, 12:41  [ТС]     Наследование #6
делала по примеру данному преподавателем,поэтому так и получилось
LosAngeles
Заблокирован
30.08.2011, 12:52     Наследование #7
вобщем так и скажи ему - к тому набору классов, что он дал применить наследование очевидно невозможно. Может это такое задание-ловушка, как на собеседованиях иногда спрашивают - наследовать прямоугольник от квадрата или квадрат от прямоугольника?

или как я уже говорил добавить ещё классы, типа AbstractUniversity->StateUnivesity->BSTU, ну или чтото вроде того
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
30.08.2011, 12:59     Наследование #8
Цитата Сообщение от LosAngeles Посмотреть сообщение
применить наследование очевидно невозможно
Ну почему же, возможно. Только идейно неверно, а этот аргумент ещё сильнее.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
30.08.2011, 15:17     Наследование #9

Не по теме:

Цитата Сообщение от Nadinka______ Посмотреть сообщение
делала по примеру данному преподавателем,поэтому так и получилось
Ещё совсем недавно не поверил бы, но уж как-то подозрительно часто такие чУдные решения "от препода" всплывают...



Nadinka______, Если есть желание всё-таки более-менее по-людски это сделать, пробуйте идти "от общего к частному". К примеру:
Базовый класс "Учебное заведение" включает поля "Название", "Количество преподавателей", "Количество учащихся"
Наследующий класс "Университет" включает дополнительно список/массив факультетов
Класс "Факультет" включает опять же название, список групп и список преподов
По такому же принципу строится класс "Группа" от абстрактного класса "Толпа народа" например...
Ну и для полноты ощущений от класса "Персона" с ФИО, годом рождения и размером противогаза наследуются два класса - один "Препод", второй "Студент"...
На вскидку как-то так, для наглядности можно всё это на бумажке нарисовать и стрелочками соединить, что от чего наследуется, а что во что включается...
Nadinka______
1 / 1 / 0
Регистрация: 12.08.2011
Сообщений: 29
10.10.2011, 13:16  [ТС]     Наследование #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class TObject 
{ 
    public: 
        virtual void Show()=0;
}; 
 
class TDepartment:public TObject   // абстрактный класс-группа 
{ 
    protected:
        char name[20];  // наименование 
        TPerson* head;  // руководитель
        TItem* last;    // указатель на начало связанного списка структур TItem 
    public:
    TDepartment(char*,TPerson*);   
        TDepardment(TDepartment&);   
        ~ TDepartment();                       
        char* GetName();        
        TPerson* GetHead(); 
        void SetName(char* NAME);   
        void  SetHead(TPerson* p);     
        void Insert(TObject* p);          
        virtual void Show()=0;  
};
 
class TPerson:public TObject
{
    protected: 
        char name[20];    //имя субъекта
                int age;          //возраст
        public:
            TPerson();   
                TPerson(TPerson&);   
                ~ TPerson();            
};
Абстрактный класс TObject - вершина иерархии, от него наследуются абстрактный класс TPerson и абстрактная группа TDepartament. TPerson включает в себя объекты TStudent, TPrepod, TDepartament соответсвенно TBSTU, TFacultet, TGroup

Я по правильному пути иду??
Я создала
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2011, 13:43     Наследование
Еще ссылки по теме:

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

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
aeshes
 Аватар для aeshes
437 / 200 / 13
Регистрация: 07.10.2011
Сообщений: 462
10.10.2011, 13:43     Наследование #11
Вот это уже лучше, только TPerson НЕ включает в себя объекты TStudent, TPrepod, а последние 2 класса наследуются от TPerson. Тоже самое про TDeparment и остальные
Yandex
Объявления
10.10.2011, 13:43     Наследование
Ответ Создать тему
Опции темы

Текущее время: 09:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru