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

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

Восстановить пароль Регистрация
 
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
23.09.2014, 13:11     Наследование классов #1
никак не разберусь с наследованием, у нас тут в методичке дана по нему общая инфа, надо сделать как в методичке, но так не получается... выдает ошибку вот что написано в методичке:

Кликните здесь для просмотра всего текста
В описании класса можно указать список базовых классов с помощью следующего синтаксиса:
class <Имя класса> : <Список базовых классов> {
}

<Список базовых классов>:
[<Спецификатор доступа>] [virtual] <Имя класса>
Конструкция имя-класса в «списке базовых» должна обозначать ранее описанный класс, который называется базовым по отношению к определяемому классу. Говорят, что класс является производным от своих базовых классов. К членам базового класса, если только они не переопределены в производном классе, можно обращаться так, как будто они являются членами производного класса. Говорят, что производный класс наследует члены базового класса.
Пример:
class Base {
public:
int a;
};

class Derived : public Base {
public:
int b, c;
};
Класс называется прямым базовым, если он находится в списке-базовых. Класс называется косвенным базовым, если он сам не являясь прямым базовым, служит базовым для одного из классов списка-базовых (является базовым для одного из базовых).


с первым способом все ясно, а вот "<Список базовых классов>: [<Спецификатор доступа>] [virtual] <Имя класса>" я не нашел такого даже у Страуструпа... что это за странный метод наследования??? у меня такое выдает ошибки
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2014, 13:11     Наследование классов
Посмотрите здесь:

C++ Наследование классов
C++ Наследование классов
Наследование классов C++
C++ Наследование классов
C++ Наследование классов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
23.09.2014, 13:27     Наследование классов #2
Виртуальное наследование
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
23.09.2014, 14:22  [ТС]     Наследование классов #3
Dani, спс, вроде то что нужно... короче походу в методичке у нас че то напутано... там вообще в этом варианте не стоит слово class, а имя нового класса идет после списка базовых классов... бред какой то...
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
23.09.2014, 16:03     Наследование классов #4
Цитата Сообщение от GetHelp Посмотреть сообщение
с первым способом все ясно
И этот способ является единственным.
Цитата Сообщение от GetHelp Посмотреть сообщение
"<Список базовых классов>: [<Спецификатор доступа>] [virtual] <Имя класса>"
Это просто пояснение к тому, что написано выше. Виртуальное наследование тут не причём.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.09.2014, 16:11     Наследование классов #5
Цитата Сообщение от GetHelp Посмотреть сообщение
а вот "<Список базовых классов>: [<Спецификатор доступа>] [virtual] <Имя класса>" я не нашел такого даже у Страуструпа...
Страуструп.
Миниатюры
Наследование классов  
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
23.09.2014, 16:13  [ТС]     Наследование классов #6
Цитата Сообщение от John Prick Посмотреть сообщение
И этот способ является единственным.
Цитата Сообщение от John Prick Посмотреть сообщение
Это просто пояснение к тому, что написано выше. Виртуальное наследование тут не причём.
там же написано
Класс называется прямым базовым, если он находится в списке-базовых. Класс называется косвенным базовым, если он сам не являясь прямым базовым, служит базовым для одного из классов списка-базовых (является базовым для одного из базовых).
так что 2 вида...

Добавлено через 41 секунду
Цитата Сообщение от alsav22 Посмотреть сообщение
Страуструп.
хз может у нас разные издания?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.09.2014, 16:24     Наследование классов #7
Цитата Сообщение от GetHelp Посмотреть сообщение
хз может у нас разные издания?
Это в любом издании будет (так же, как и в любом учебнике).
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
23.09.2014, 16:28     Наследование классов #8
Цитата Сообщение от GetHelp Посмотреть сообщение
так что 2 вида...
По синтаксису - 1 вид. То, что ты процитировал - это просто объяснение, как класс может фактически наследовать от другого.
C++
1
2
3
4
5
class A {};
class B: public A {};
class C {};
class D: public B, private С {};
// и т.д.
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
23.09.2014, 19:35  [ТС]     Наследование классов #9
помогите правильно сделать наследование, значит задание такое:
Кликните здесь для просмотра всего текста
Лабораторное задание
Лабораторная работа выполняется на базе работы №3.
Необходимо разработать не менее 3 производных классов. Каждый производный класс должен расширять базовый. В каждый производный класс необходимо добавить переменные и функции, уточняющие базовый класс.
Структура классов должна быть следующей:
– Base : Derived1
– Base : Derived2
– Derived2 : Derived3
В качестве базового класс Base берется класс, разработанный в лабораторной работе №3. Производные классы Derived1 и Derived2 должны быть пронаследованы от базового класса. Класс Derived3 должен быть пронаследован от производного класса Derived2.
Во всех производных классах Derived1, Derived2 и Derived3 должны быть реализованы два метода: Input и Output. Методы должны использовать вызовы из родительского класса. Т.е. в производном классе в функциях первоначально должны быть вызваны функции базового класса (для Derived1 и Derived2 функции из класса Base, для Derived3 функции из класса Derived2), а затем выполнен ввод и вывод данных текущего класса.

класс из 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
class town //класс населенный пункт
{
private:
    char* name; //название
    double latitude; //широта
    double longitude; //долгота
    char* transport; //виды общественного транспорта
 
    inline char* getname() { return name; }
public:
    //конструктор без параметров
    town();
    //конструктор с параметром задающим название
    town(char* _name);
    //конструктор с параметрами задающими все поля
    town(char* _name, size_t _population, char* _transport, double _latitude = 0.0, double _longitude = 0.0);
    //копирующий конструктор
    town(town& t);
    //деструктор
    ~town();
    //метод Input выполняет ввод данных из файла
    bool Input();
    //метод Output печатает на экране данные класса
    bool Output();
protected:
    size_t population; //количество жителей
 
    inline size_t getpopulation() { return population; }
};
 
class Derive1 : public town
{
};
 
class Derive2 : public town
{
};
 
class Derive3 : public virtual Derive2
{
};
я там как бы уже набросок сделал, вроде примерно так? только теперь с методами, там думаю надо сделать просто чтобы эти Input, Output из потомков как там и написано просто вызывали Input, Output из родителей, как их правильно описать? в какой секции? protected?
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
23.09.2014, 21:39     Наследование классов #10
Цитата Сообщение от GetHelp
C++
1
class Derive3 : public virtual Derive2
virtual-наследование лишено смысла здесь, так как virtual применяется при множественном ромбовидном наследовании.
Цитата Сообщение от GetHelp
C++
1
2
protected:
    size_t population; //количество жителей
Данные-члены не рекомендуется помещать в protected секцию, так как при этом нарушается принцип инкапсуляции.
Цитата Сообщение от GetHelp Посмотреть сообщение
Необходимо разработать не менее 3 производных классов. Каждый производный класс должен расширять базовый. В каждый производный класс необходимо добавить переменные и функции, уточняющие базовый класс.
Имхо, нужны классы, несущие хоть какую-то смысловую нагрузку. Например, если базовый town, то производные: village, satellite, megacity и т.д.
GetHelp
-8 / 60 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
23.09.2014, 21:43  [ТС]     Наследование классов #11
Цитата Сообщение от John Prick Посмотреть сообщение
virtual-наследование лишено смысла здесь, так как virtual применяется при множественном ромбовидном наследовании.
думаю если это есть в методичке то это 100% надо использовать... у нас тут все так...
Цитата Сообщение от John Prick Посмотреть сообщение
Данные-члены не рекомендуется помещать в protected секцию, так как при этом нарушается принцип инкапсуляции.
вот прямое подтверждение кстати, я согласен с тем что это бред, но задание первой лабы требовало переменных и методов в protected области, а придумать что то более нужно там я не смог...
Цитата Сообщение от John Prick Посмотреть сообщение
Имхо, нужны классы, несущие хоть какую-то смысловую нагрузку. Например, если базовый town, то производные: village, satellite, megacity и т.д.
да пофиг скорее всего, тут главное чтобы было образец работы с наследованием, преподу до фени на смысл...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2014, 22:17     Наследование классов
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
23.09.2014, 22:17     Наследование классов #12
Цитата Сообщение от GetHelp Посмотреть сообщение
думаю если это есть в методичке то это 100% надо использовать... у нас тут все так...
Если "методичка" это то, что ты приводил в начале, то там просто обозначен весь возможный набор ключевых слов. Не думаю, что это обязательно использовать. Тем более, что виртуальное наследование довольно редкий случай, и логически обоснованный пример так просто не изобретёшь.
Yandex
Объявления
23.09.2014, 22:17     Наследование классов
Ответ Создать тему
Опции темы

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