С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
3 / 3 / 8
Регистрация: 25.11.2015
Сообщений: 127
1

Нюансы использования абстрактных базовых классов (класс Shape)

18.12.2015, 20:26. Показов 879. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня класс Point наследуется с абстрактного базового класса Shape, и Point тоже абстрактный, поскольку не определил функцию get_area(). Знаю, что не могу создать обьект класса Point, но как мне работать с функциями point, с помощью указателя, если не позволяет инициализировать ( в main). Не очень хорошо понимаю абстракцию. Дайте ключевые понятия плиз.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
class Shape {
public:
    virtual void print()=0;
    virtual double get_area()=0;
    virtual~ Shape() {}
};
class Point :public Shape {
    double x;
    double y;
public:
    Point(double X=0, double Y=0) {x=X; y=Y;}
    double get_xP()const {return x;}
    double get_yP()const {return y; }
    void print() {std::cout<<"Print point : ("<<x<<","<<y<<")\n";}
};
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include "inh.h"
int main() {
    Point* P=new Point; //???
    P->print(); //???
 
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.12.2015, 20:26
Ответы с готовыми решениями:

Вынести методы из классов Panel и PictureBox (явная реализация методов базовых абстрактных классов)
Тема: Множественное наследование. Явная реализация методов базовых абстрактных классов. Как...

Множественное наследование с использованием абстрактных базовых классов
тема: Множественное наследование с использованием абстрактных базовых классов, файлового...

Множественное наследование с использованием абстрактных базовых классов, файлового ввода-вывода с применением потоков С++, функций обработки исключи
Создать программу с абстрактным базовым классом и множественным наследованием, реализовать в нем: ...

Конструкторы базовых классов ("Производный класс не наследует конструкторы базовых классов")
Как следует понимать выражение &quot;Производный класс не наследует конструкторы базовых классов&quot;, если...

10
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
18.12.2015, 20:42 2
Цитата Сообщение от DavidTs Посмотреть сообщение
и Point тоже абстрактный, поскольку не определил функцию get_area().
Что мешает определить?
0
3 / 3 / 8
Регистрация: 25.11.2015
Сообщений: 127
18.12.2015, 21:12  [ТС] 3
nord_v, А как определить площадь точки?. Ну и вопрос вообще то был про подобных ситуациях, а не конкретно здесь.
0
Диссидент
Эксперт C
27708 / 17325 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
18.12.2015, 21:21 4
Цитата Сообщение от DavidTs Посмотреть сообщение
А как определить площадь точки?
C++
1
double get_area() { return 0; }
А так-то пока все чисто виртуальные методы не определишь, экземпляр не создастся

Добавлено через 1 минуту
Цитата Сообщение от DavidTs Посмотреть сообщение
про подобных ситуациях
Ну вот аналогично и определяй...
1
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
18.12.2015, 21:22 5
Цитата Сообщение от DavidTs Посмотреть сообщение
Ну и вопрос вообще то был про подобных ситуациях, а не конкретно здесь.
Хоть конкретно здесь, хоть не конкретно здесь:
Цитата Сообщение от Байт Посмотреть сообщение
пока все чисто виртуальные методы не определишь, экземпляр не создастся
1
3 / 3 / 8
Регистрация: 25.11.2015
Сообщений: 127
18.12.2015, 21:33  [ТС] 6
Байт, nord_v, Спасибо вас, начинаю что то понять, но походу еще много вопросов будут.
Так это правильный подход, всегда что бы избежать от абстракций какого то класса (в иерархии) просто взять все функции базового класса которые не имеют смысл в производном классе определить так, чтоб возвращал абсурдное значение(определить так чтоб не имел смысл)?
0
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
18.12.2015, 21:37 7
Цитата Сообщение от DavidTs Посмотреть сообщение
просто взять все функции базового класса которые не имеют смысл в производном классе определить так, чтоб возвращал абсурдное значение(определить так чтоб не имел смысл)?
Не все и возвращают, тогда можно просто пустое тело задать. А в данном примере, не так уж и бессмысленно, ведь точка не имеет площади, значит площадь точки нулевая.
0
Диссидент
Эксперт C
27708 / 17325 / 3810
Регистрация: 24.12.2010
Сообщений: 38,979
18.12.2015, 21:44 8
Цитата Сообщение от DavidTs Посмотреть сообщение
чтоб возвращал абсурдное значение(определить так чтоб не имел смысл)?
Ну почему абсурдное? Точка ведь и впрямь имеет нулевую площадь!
Но вообще-то если реальный класс хочет наследоваться от абстрактного, он должен определить, "закрыть" все его чисто виртуальные методы. А уж как - это не важно. Если метод что-то возвращает - пусть он возвратит нуль. void-метод пусть просто ничего не делает.
Пример. Класс СОБАКА. Метод - void Поднять_Хвост(градус). class ЭРДЕЛЬ : СОБАКА. Так как у эрделей хвоста нет, то и поднимать нечего. Метод просто ничего не делает. Но написать это нужно: void Поднять_Хвост(градус) { }
1
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
18.12.2015, 21:44 9
А чтобы не было возможности вызывать такие функции, можно из в private-область поместить.
1
Байт
18.12.2015, 21:45
  #10

Не по теме:

nord_v, ну мы с вами прям в один голос поем...:)

0
3 / 3 / 8
Регистрация: 25.11.2015
Сообщений: 127
18.12.2015, 21:54  [ТС] 11
Байт, nord_v, Спасибо вас, помогли очень, теперь ясно )
0
18.12.2015, 21:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.12.2015, 21:54
Помогаю со студенческими работами здесь

Класс наследуемый от двух базовых классов
Друзья Являеться ли класс (А)- Классом наследуемым от двух базовых классов? Если не правильно то...

Создать не менее 2-х базовых классов и класс, наследующий их поля
Используя условия задач из лабораторной работы № 12-13, разработайте алгоритм и создайте программу...

Список абстрактных классов
Здравствуйте! Прошу помочь с одной проблемой. Суть проблемы в следующем - есть 2 разных класса...

Использование абстрактных классов
Простите заранее за нубский вопрос. Давно ничего не программировал, а тут понадобилось. Скачал...

Объекты и экземпляры абстрактных классов
Здравствуйте, помогите, пожалуйста, разобраться: Суть в чем - экземпляры абстрактных классов...

Поиск в массиве абстрактных классов
Добрый вечер, подскажите, у меня есть абстрактный класс назавем его X(выводит на экран), он имеет...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru