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

Чем отличается Абстрагирование от Наследования? - C++

Восстановить пароль Регистрация
 
dimabubyakin
 Аватар для dimabubyakin
158 / 123 / 44
Регистрация: 16.10.2013
Сообщений: 1,732
Завершенные тесты: 5
09.04.2014, 22:04     Чем отличается Абстрагирование от Наследования? #1
Много пересмотрел тем таких же на этом форуме, пытался понять абстрагирование, вообщем, можете мне ответить на несколько вопросов:
1) Чем отличается Абстрагирование от Наследования?
2) Что значит Const в этой строке и зачем оно нужно?
C++
1
virtual void Func()const
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
#include <iostream>
#include <conio.h>
using namespace std;
class ABC
{
public:
    virtual void Show()=0;
};
/***********************/
class A:public ABC
{
public:
    void Show()
    {
        cout<<"A"<<endl;
    }
};
/***********************/
class B:public ABC
{
public:
    void Show()
    {
        cout<<"B"<<endl;
    }
};
/***********************/
main()
{
ABC *a;
a=new A;
a->Show();
a=new B;
a->Show();
getch();
}
Добавлено через 9 минут
И еще по указателям вопрос, какая разница между
C++
1
ClassName* a;
и
C++
1
ClassName *a;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2014, 22:04     Чем отличается Абстрагирование от Наследования?
Посмотрите здесь:

C++ Чем отличается С++ от Visual С++?
Чем отличается ln , lg, и log ? C++
C++ Чем отличается this от *this?
C++ Чем new отличается от malloc?
чем отличаются структуры для наследования интерфейса, от структур, для наследования реализаций C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
09.04.2014, 22:21     Чем отличается Абстрагирование от Наследования? #2
Цитата Сообщение от dimabubyakin Посмотреть сообщение
Что значит Const в этой строке
Что функция-член не изменяет объект this.
Цитата Сообщение от dimabubyakin Посмотреть сообщение
Чем отличается Абстрагирование от Наследования?
агрегирование может быть всё же?
Цитата Сообщение от dimabubyakin Посмотреть сообщение
Обязательно использовать указатели?
Можно и ссылки. Но по-сути, это одно и то же.

Цитата Сообщение от dimabubyakin Посмотреть сообщение
какая разница между
никакой.

Цитата Сообщение от dimabubyakin Посмотреть сообщение
правильно?
не очень. Т.к. нужен ещё виртуальный деструктор в базовом классе. И в коде есть утечка памяти, т.к. вызов
a=new B; затирает адрес ранее выделенной памяти под объект типа A. Освобождения памяти нет еще.
DrOffset
6458 / 3832 / 885
Регистрация: 30.01.2014
Сообщений: 6,628
09.04.2014, 23:48     Чем отличается Абстрагирование от Наследования? #3
Цитата Сообщение от dimabubyakin Посмотреть сообщение
И вот то как я "понял" абстрагирование, правильно?
То, что ты изобразил, полиморфизм называется.
Ну и по техническим деталям Tulosba прав.
dimabubyakin
 Аватар для dimabubyakin
158 / 123 / 44
Регистрация: 16.10.2013
Сообщений: 1,732
Завершенные тесты: 5
10.04.2014, 16:37  [ТС]     Чем отличается Абстрагирование от Наследования? #4
Tulosba,
Цитата Сообщение от Tulosba Посмотреть сообщение
Т.к. нужен ещё виртуальный деструктор в базовом классе. И в коде есть утечка памяти, т.к. вызов
a=new B; затирает адрес ранее выделенной памяти под объект типа A. Освобождения памяти нет еще.
как мне это сделать? Освобождение памяти? И про деструктор, что в нем должно быть?
Вот так?
C++
1
virtual ~ABC();
Добавлено через 3 минуты
И как мне сделать абстрагирование, и чего не хватает до полиморфизма?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
10.04.2014, 17:07     Чем отличается Абстрагирование от Наследования? #5
C++
1
virtual ~ABS() {} // пустое тело
Цитата Сообщение от dimabubyakin Посмотреть сообщение
Освобождение памяти?
Вызвать
C++
1
delete a;
перед присваиванием указателю нового объекта и перед завершением программы.
Ещё хорошо бы при перегрузке виртуальной функции в дочернем классе указывать virtual. А если используйте C++11, то и override еще:
C++
1
2
3
4
5
6
7
8
class A:public ABC
{
public:
    virtual void Show() override
    {
        cout<<"A"<<endl;
    }
};
Yandex
Объявления
10.04.2014, 17:07     Чем отличается Абстрагирование от Наследования?
Ответ Создать тему
Опции темы

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