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

Так в каких случаях стоит использовать наследование? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Массив: Удалить в матрице столбцы количество нулей в которых больше половины. http://www.cyberforum.ru/cpp-beginners/thread793812.html
То что накрапал.Здание , которое необходимо реализовать : Удалить в матрице столбцы количество нулей в которых больше половины. При этом должна быть работа со структурами. // For practisw.cpp: определяет точку входа для конс приложения. // #include "stdafx.h" #include <conio.h> #include <iostream> #include <stdio.h> #include <iostream> #include <time.h>
C++ undefined reference to IID_IMultiLanguage Использую mingw + code::blocks для сборки библиотеки vmime под windows, в библиотеке используется COM, строка CoCreateInstance(CLSID_CMultiLanguage, NULL, CLSCTX_INPROC_SERVER, IID_IMultiLanguage, (void**)&pMultiLanguage); выдает ошибку линковки undefined reference to `IID_IMultiLanguage'. IID_IMultiLanguage объявлен в mlang.h как extern, в libuuid.a где храняться эти определения... http://www.cyberforum.ru/cpp-beginners/thread793809.html
C++ Прединкремент и постинкремент в цикле for
Всем привет! Пытаюсь сам себе ответить на вопрос, есть ли разница в использовании пред- и постинкремента в цикле for. Т.е. циклы: for (a=0; a<10; a++); и for (a=0; a<10; ++a); идентичны или нет? Я не смог найти разницы.
C++ Осуществить сдвиг матрицы
вообщем программа много чего делает , не суть , проблема заключаеться в ф-ции memcpу , по сколько при выводиде результирующего массива скопированная в него вторая матрица принимает отрицательные значения... Короче говоря проблема в последнем выводе , выводять отрицательные значения. // 1LR OPI.cpp: определяет точку входа для консольного приложения. // #include "stdafx.h" #include <conio.h>...
C++ Причина такого вывода данных? http://www.cyberforum.ru/cpp-beginners/thread793794.html
Простой пример. Определил размерность массива 100. Так почему sizeof выдаёт значение 400, а не 100? Любые значения множаться на 4. Это как же так? #include <array> #include <locale> #include <time.h> using namespace std; int M ;
C++ C++ ООП. Создать базовый класс Array Задание выглядит так: Создать базовый класс Array, в котором определите полемассив подходящеrо типа и поле для хранения количества элементов у текущего объектамассива. Максимально возможный размер массива задается статической константой. Реализуйте конструктор инициализации, задающий количество элементов и начальное значение (по умолчанию О). Реализуйте методы доступа к отдельному элементу,... подробнее

Показать сообщение отдельно
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
25.02.2013, 22:52     Так в каких случаях стоит использовать наследование?
Попробую прояснить protected, если я не прав просьба поправить. Я думаю как сейчас опишу, но я могу заблуждаться.

Например над одной программой работает коллектив программистов. Планируется, что программа многофункциональна и поэтому одни разрабатывают что-то одно, что в конце должно собраться в одно целое, вторые разрабатывают что-то другое, что должно собраться в совершенно другое целое. Третьи третье и так далее. Все эти получившиеся целые надо собрать воедино. Вот тут есть момент, что то, что делали одни начнет приводить к конфликтам того, что делали другие. Такое возможно по многим причинам.

Чтобы избежать бооольших проблем из-за возможной не состыковки, имеет смысл применять protected наследование.(конечно можно и по другому, ведь С++ == как хочу, так верчу)

Чтобы было яснее, я приведу пример не наследования protected, а модификатора protected
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
class A
{
protected:
    void prot() //Вот эта функция защищена модификатором protected
    {
        cout<<"prot\n"; //Если мы ее вызовем, то напишем сообщение
    }
};
 
class B:public A //Наследуем B из A 
{
public:
    void func() //Эта функция из класса B, но
    {
        prot(); //она наследует функцию из А и вызывает ее, словно был вызван метод из А
    }
};
 
int main()
{
    A objA; //Объект класса А
    B objB;//Объект класса B
 
    //objA.prot(); //Так нельзя, потому что в А метод защищен от воздействия
    
    objB.func(); //Но так можно. Это уже имитация метода из класса А
    cin.get();
    return 0;
}
Смысл в том, что protected защищает метод от воздействия извне, но любые потомки могут открыто его использовать.

Если смотреть чуть-чуть глобальнее, то можно понять ход моих мыслей. Сейчас я защищал метод класса, но что мешает защищать одну иерархию классов от другой иерархии если все эти иерархии в конце планируется объединить. (другими словами, что мешает огораживать создание первого целого из кусочков от создания второго целого из кусочков для одной конечной сборки).

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