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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 5.00
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 373
#1

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

15.03.2013, 02:21. Просмотров 1459. Ответов 10
Метки нет (Все метки)

Главный класс.

C++
1
2
3
4
5
class CStart
{
    public:
        void Start( );
};
Унаследование:

C++
1
2
3
4
5
class CEnd : public CStart
{
    public:
        void End( );
};
Могу ли я обратиться к void Start( ); так же и через класс CEnd ?

C++
1
2
3
4
5
6
7
8
9
void CStart::Start() 
{
    return;
}
 
void CEnd::Start() 
{
    return;
}
У нас конечно ошибка: Использование унаследованных членов не допускается.

Просто мне в разных классах,необходимо обратиться к одной общей функции.


У меня очень большой проект и проблема с ООП. Но об ООП я читал и конкретного решения нет,как быть с большими проектами,где необходимо использовать определеную функцию многократно,кроме как использовать эту функцию одну,для всех нужд,то есть пихать все в неё,но это не удобно,когда очень много кода,лучше когда все разбито по полочкам, или делать с неё ветви ( Под этим я подрузомеваю просто в неё добавлять кучу функций,которые я буду использовать в других срр,но выйдет плохой код )
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2013, 02:21     Унаследование классов
Посмотрите здесь:

C++ Преобразования объектов классов в объекты других классов
Наследование классов. Копирование производных классов C++
унаследование, как реализовать? C++
Видимость классов C++
Иерархия классов C++
C++ Реализация отношения классов типа двунаправленная ассоциация, UML, порядок объявления классов, неполный класс
Иерархия классов С++ C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт CЭксперт С++
6614 / 3805 / 495
Регистрация: 29.11.2010
Сообщений: 10,044
15.03.2013, 02:34     Унаследование классов #2
Не понял, что требуется то?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
class CStart
{
    public:
        void Start( ) { std::cout << "CStart(Start)\n"; }
};
 
class CEnd : public CStart
{
    public:
        void Start() { std::cout << "CEnd(Start)\n"; }
        void End( ) {}
};
 
 
 
int main()
{
    CEnd c;
    c.Start();
    c.CStart::Start();
}
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 373
15.03.2013, 02:40  [ТС]     Унаследование классов #3
Я не знаю,это уже не первая моя тема,но что мне делать,никто не может подсказать.

Мне просто нужно использовать одну функцию в разных срр.

main.cpp



C++
1
2
3
4
5
int main()
{
       Start();
       return 0;
}
Мне и надо выполнять разный код в Start()

1.cpp

C++
1
2
3
4
void Start()
{
 
}
2.cpp

C++
1
2
3
void Start()
{
}
и тд.

Я думал классы как-то решат проблему.
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,917
Записей в блоге: 1
15.03.2013, 02:59     Унаследование классов #4
Цитата Сообщение от pEntity Посмотреть сообщение
одну функцию в разных срр.
Цитата Сообщение от pEntity Посмотреть сообщение
разный код в Start()
ты сам то определись, что тебе нужно: разные функции или одинаковые.
Тебе просто вызвать функцию, созданную в другом срр файле что ли?
Классы с проблемами разделения по файлам никак не связаны.
MrGluck
Ворчун
Эксперт CЭксперт С++
6614 / 3805 / 495
Регистрация: 29.11.2010
Сообщений: 10,044
15.03.2013, 03:07     Унаследование классов #5
вынести функцию в отдельный хедер и подключать её к модулям, где требуется не пробовали?
taras atavin
Ушёл с форума.
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
15.03.2013, 07:11     Унаследование классов #6
Цитата Сообщение от pEntity Посмотреть сообщение
У нас конечно ошибка: Использование унаследованных членов не допускается.
Допускеается. Унаследованный член при наследовании становится членом наследующего класса и на него полностю распространяются все обычные правила обращения к членам. Но есть одно исключение: если в предке этот член private, то прямое обращение к нему из потомка не возможно.
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 373
15.03.2013, 20:41  [ТС]     Унаследование классов #7
MrGluck,taras atavin,можно пример?

Добавлено через 46 секунд
или одинаковые.
Тебе просто вызвать функцию, созданную в другом срр файле что ли?
Да.
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,917
Записей в блоге: 1
15.03.2013, 20:57     Унаследование классов #8
Цитата Сообщение от pEntity Посмотреть сообщение
Тебе просто вызвать функцию, созданную в другом срр файле что ли?
Да.
C++
1
2
3
4
5
//file1.cpp
int global_number;//глобальная переменная
void func(){//внешняя функция
 
}
C++
1
2
3
4
5
6
7
//file2.cpp
void func();//для функций написать прототип
extern int global_number;//для переменных написать extern объявление 
int main(){
  func();//вызвать функции как обычно
  global_number=0;//использовать переменные как обычно
}
если функции используются множеством файлов, удобно их прототипы выносить в заголовок
C++
1
2
3
//file_header1.h
void func();//для функций написать прототип
extern int global_number;//для переменных написать extern объявление
C++
1
2
3
4
5
6
//file2.cpp
#include "file_header1.h"
int main(){
  func();//вызвать функции как обычно
  global_number=0;//использовать переменные как обычно
}
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 373
15.03.2013, 21:50  [ТС]     Унаследование классов #9
Я это и использую. Но я же говорю проект очень большой. Мне таких прототипов придется делать штук 15. Это ведь не гуманно. Разве нет более лучшего решения ? Просто так выйдет быдло код.
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,917
Записей в блоге: 1
15.03.2013, 22:05     Унаследование классов #10
что значит "быдлокод"?
сколько функций - столько и прототипов. Пример проблемы то можно увидеть?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.03.2013, 00:36     Унаследование классов
Еще ссылки по теме:

C++ Абстракция классов
C++ Наследование классов
Взаимодействие классов C++
Насследование классов C++
C++ Вынести методы из классов Panel и PictureBox (явная реализация методов базовых абстрактных классов)

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

Или воспользуйтесь поиском по форуму:
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 373
16.03.2013, 00:36  [ТС]     Унаследование классов #11
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
#include <extdll.h>
#include <meta_api.h>
#include "ZBM3_Precache_Init.h"
 
 
 
void PRECACHE_Init( )
{
    PRECACHE_MAPS( );
    PRECACHE_AMBIENCE( );
    PRECACHE_INFECTION( );
    PRECACHE_AMBIENCE_SOUNDS( );
    PRECACHE_HUNTER( );
    PRECACHE_GHOST( );
    PRECACHE_TRAP( );
    PRECACHE_DOCTOR( );
    PRECACHE_DEIMOS( );
    PRECACHE_ZOMBIES( );
    PRECACHE_ZOMBIES_SOUND( );
    PRECACHE_HUMANS( );
    PRECACHE_DEATMACH( );
    PRECACHE_EFFECTS_KILLER( );
    PRECACHE_EFFECTS_INFECT( );
    PRECACHE_HERO( );
    PRECACHE_HEROIN( );
    PRECACHE_EVOLUTION( );
    PRECACHE_MORALE( );
    PRECACHE_DROP_STRIP( );
    PRECACHE_TEAM_SCORING( );
    PRECACHE_ITEMS( );
    PRECACHE_GRENADE( );
}
Разве это нормально? Мб и нормально,но почему-то я думаю есть лучшее решение.
Yandex
Объявления
16.03.2013, 00:36     Унаследование классов
Ответ Создать тему
Опции темы

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