Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 17.02.2015
Сообщений: 20

Может ли наследник пользоваться не всеми методами родителя, а только частью?

08.09.2016, 16:52. Показов 1348. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, есть вопрос, может ли наследник пользоваться не всеми методами родителя, а только теми которые нужны мне. Например есть класс УСТРОЙСТВО с множеством разных методов и есть класс наследник но уже с ограничениями возможностями.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.09.2016, 16:52
Ответы с готовыми решениями:

Ошибка доступа access violation: почему класс-наследник не видит protected данные-члены класса-родителя?
Подскажите есть базовый класс в разделе protected разместил переменную, которая по идее должна быть видна всем наследникам. Но при запуске...

Выбор значения у которого только один наследник ( ТОЛЬКО уникальное значение)
Добрый день. Прошу прощения за глупый вопрос, но я новичок и столкнулся с такой проблемой: Есть таблица Objects, состоящая из столбцов...

Как пользоваться методами массива?
Поясните на примере vs 2013 int _tmain() { setlocale(LC_ALL, ""); string w; cout << "размер текущего массива " <<...

9
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
08.09.2016, 16:56
RomanMaks, Если не нужны какие то методы, можно просто их не использовать
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
08.09.2016, 16:57
Может. private - члены ему недоступны.
1
0 / 0 / 0
Регистрация: 17.02.2015
Сообщений: 20
08.09.2016, 17:00  [ТС]
castaway, А если мне нужно создать одного наследника с одним набором, а друго с другим?
0
Эксперт С++
1624 / 954 / 782
Регистрация: 06.02.2016
Сообщений: 2,452
Записей в блоге: 31
08.09.2016, 17:04
Лучший ответ Сообщение было отмечено gru74ik как решение

Решение

Можно ещё так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Man{
    private:
        int age;
        public:
            Man(int a=0):age(a){}
            void show(){
                cout<<"Human"<<endl;
            }
};
class Woman:public Man{
    private:
        int p;
        public:
            Woman(int x, int y):Man(x),p(y){}
            void show()=delete; // show нельзя будут использовать в классе Woman
};
2
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
08.09.2016, 17:28
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
45
46
47
48
49
50
51
52
53
class CommonBase
{
public:
    void f1() {}
    void f2() {}
    void g1() {}
    void g2() {}
    void g3() {}
 
    virtual ~CommonBase() {}
};
 
class OnlyFAbs : private CommonBase
{
public:
    using CommonBase::f1;
    using CommonBase::f2;
 
    ~OnlyFAbs() = 0;
};
 
inline OnlyFAbs::~OnlyFAbs() {}
 
class OnlyGAbs : private CommonBase
{
public:
    using CommonBase::g1;
    using CommonBase::g2;
    using CommonBase::g3;
 
    ~OnlyGAbs() = 0;
};
 
inline OnlyGAbs::~OnlyGAbs() {}
 
class OnlyF : public OnlyFAbs
{
};
 
class OnlyG : public OnlyGAbs
{
};
 
int main()
{
    OnlyF of;
    of.f1(); //ok
    //of.g1(); //error
 
    OnlyG og;
    //og.f1(); //error
    og.g3(); //ok
}
2
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
08.09.2016, 18:20
Цитата Сообщение от RomanMaks Посмотреть сообщение
castaway, А если мне нужно создать одного наследника с одним набором, а друго с другим?
А какая в этом практическая польза?
0
0 / 0 / 0
Регистрация: 17.02.2015
Сообщений: 20
08.09.2016, 20:11  [ТС]
castaway, стоит задача хранить всех этих наследников в одном каком-то списке, чтобы потом я мог к ним обращаться, вот и подумал что может сделать такой класс от которого я буду брать только то что мне нужно в других устройствах.

Добавлено через 1 минуту
castaway, может я иду в неправильном направлении, но это узнаю только по итогу, с классами у меня туговато.
0
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
08.09.2016, 20:16
Цитата Сообщение от RomanMaks Посмотреть сообщение
может я иду в неправильном направлении
Скорее всего.

Цитата Сообщение от RomanMaks Посмотреть сообщение
вот и подумал что может сделать такой класс от которого я буду брать только то что мне нужно в других устройствах.
Просто не берите то, что вам не нужно.
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
08.09.2016, 20:49
Цитата Сообщение от RomanMaks Посмотреть сообщение
стоит задача хранить всех этих наследников в одном каком-то списке, чтобы потом я мог к ним обращаться, вот и подумал что может сделать такой класс от которого я буду брать только то что мне нужно в других устройствах.
тогда пример из #5 вас не спасет.

http://rextester.com/XLZS96672


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
#include <iostream>
 
 
class Man{
    private:
        int age;
        public:
            Man(int a=0):age(a){}
            void show(){
                std::cout<<"Human"<<std::endl;
            }
};
class Woman:public Man{
    private:
        int p;
        public:
            Woman(int x, int y):Man(x),p(y){}
            void show()=delete; // show нельзя будут использовать в классе Woman
};
 
int main()
{
    std::cout << "Hello, world!\n";
    
    Woman w(1,1);
    
    Man& m = w;
    
    m.show();
    
}
output:
Hello, world!
Human
вообще сама по себе ваша задумка - ущербна по своей сути.
но если так сильно нужно, то:

1.
можно просто не определять в базовом классе то,
чего не должно быть в наследнике.

а при доступе к методам конкретного наследника
использовать dynamic_cast

существует метрика,
согласно которой частое употребление dynamic_cast в коде - признак ущербной архитектуры,
и серьёзных проблем в проекте.

2.
можно определить метод в базовом классе
а в наследниках запрещать их использование при помощи assert

но по сути это - те же яйца, только сбоку

3.
правильным подходом считается продумать архитектуру.
а не мешать все в кучу.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.09.2016, 20:49
Помогаю со студенческими работами здесь

Тип Complex со всеми вытекающими свойствами и методами: перевести с C++
Привет! Помогите плиз!!! У меня есть тип Complex со всеми вытекающими свойствами и методами... как перевести из C++ в C# строчку: ...

Не могу понять, как пользоваться методами
:help:Не могу разобраться с классами, помогите кто может! Я понимаю зачем нужен класс, и разницу открытых и закрытых данных, но не могу...

Какими методами для работы с файлами и каталогами следует пользоваться?
Недавно изучаю, C++. И в отличие от PHP, он наполнен большим количеством функций, для решения одной и той же задачи. Когда я ищу в...

Вывод поста, который содержит id категории, её родителя, родителя родителя
Есть 2 таблицы, первая - категории ( category_id, parent_id и т.д), вторая - посты (post_id, category_id) В общем, в...

Может ли функция быть действительной частью
U=x^2+y^2-xy \frac{dU}{dx}=\frac{dV}{dy}=2x-y\rightarrow V=\int(2x-y)dy=2xy-\frac{y^2}{2} \frac{dU}{dy}=-\frac{dV}{dx}=2y-x\rightarrow...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru