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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 30, средняя оценка - 4.80
Norka
0 / 0 / 0
Регистрация: 14.04.2011
Сообщений: 3
#1

Абстрактные классы, наследование - C++

14.04.2011, 16:21. Просмотров 4229. Ответов 16
Метки нет (Все метки)

Задание: Написать базовый абстрактный класс «фигура» (с чистыми виртуальными функциями: нарисовать, передвинуть, повернуть) и два класса наследника окружность и квадрат, с различной реализацией этих функций. В основной программе создать массив указателей базового класса на объекты классов наследников. Передвинуть все объекты на одинаковое расстояние.

Помогите плиз, кто чем может=)

Добавлено через 2 часа 9 минут
Up, все еще нужна помощь...Заоранее благодарен
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2011, 16:21     Абстрактные классы, наследование
Посмотрите здесь:

Наследование и абстрактные классы - C++
расскажите что это и с чем это едят......... а то как то встал на этом!!!

Абстрактные классы. Наследование - C++
Здравствуйте! Препод дал задание на наследование и абстрактные классы. Кому не трудно, посмотрите, пожалуйста код, правильно ли я делаю? ...

Наследование, абстрактные классы. - C++
Собственно нужно создать абстрактный базовый класс Shape, от него наследовать абстрактные классы Shape2D и Shape3D. От них конкретные...

Наследование: Чистые Виртуальные функции и Абстрактные классы - C++
Добрый вечер помогите пожалуйста вывести на экран то что мы вводим с клавиатуры ( int s , char d ) #include "stdafx.h" ...

Абстрактные классы - C++
void _tmain() { const int lim = 100; MyFunction *pFunc ; int count = 0; pFunc = new My_Exp; pFunc = new Line; pFunc...

Абстрактные классы - C++
Помогите пожалуйста, сообразить не могу. Есть абстрактный класс. У него есть метод, чтение из файла. Есть производный от него класс....

абстрактные классы - C++
компилятор ругается когда я пытаюсь записать объект класса!!!! подскажите что я не правильно делаю!! #include <cstdlib> #include...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IrineK
Заблокирован
14.04.2011, 16:36     Абстрактные классы, наследование #2
Дейтель, Харви и Пол. Как программировать на С++
Глава 10.9. Очень близкий пример.
igorrr37
1644 / 1272 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
14.04.2011, 18:50     Абстрактные классы, наследование #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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include<iostream>
#include<windows.h>
 
class Shape{
    protected:
        int rotated;
        int shifted;
    public:
        Shape():rotated(0), shifted(0){}
        virtual void Draw(int)=0;
        virtual void Rotate(int)=0;
        virtual void Shift(int)=0;
        int GetRotated(){return rotated;}
        int GetShifted(){return shifted;}
};
 
class Square:public Shape{
    private:
        int length;
    public:
        Square():Shape(), length(0){}
        void Draw(int);
        void Rotate(int);
        void Shift(int);
        int GetLength(){return length;}
};
 
void Square::Draw(int ini){
    length=ini;
    std::cout<<"Нарисован квадрат со стороной "<<ini<<"\n";
}
void Square::Rotate(int ini){
    rotated+=ini;
    std::cout<<"Квадрат повёрнут на "<<ini<<"\n";
}
void Square::Shift(int ini){
    shifted+=ini;
    std::cout<<"Квадрат сдвинут на "<<ini<<"\n";
}
 
int main(){
    SetConsoleOutputCP(1251);
    int size=3;
    Shape* arr[size];
    for(int i=0; i<size; i++){
        arr[i]=new Square();
        arr[i]->Draw(10);
        arr[i]->Shift(5);
    }
    for(int i=0; i<size; i++){
        delete arr[i];
        arr[i]=NULL;
    }
    return 0;
}
Norka
0 / 0 / 0
Регистрация: 14.04.2011
Сообщений: 3
15.04.2011, 15:47  [ТС]     Абстрактные классы, наследование #4
Благодарю, но возник еще вопросик...
Компилятор ругается на строчку
C#
1
Shape* arr[size];
Пишит что хочет константное вырожение, ну если сделать константу то все работает, а как сделать не константой?
outoftime
║XLR8║
508 / 430 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
15.04.2011, 16:06     Абстрактные классы, наследование #5
C++
1
Shape *arr = new Shape[size];
Ma3a
Эксперт C++
616 / 460 / 31
Регистрация: 28.01.2011
Сообщений: 605
15.04.2011, 16:09     Абстрактные классы, наследование #6
outoftime, тогда скорее вот так
C++
1
Shape ** arr = new Shape*[size];
Lavios
62 / 62 / 2
Регистрация: 27.01.2011
Сообщений: 250
15.04.2011, 16:25     Абстрактные классы, наследование #7
Для справки первый вариант не работает=) Второй нормальный=)
Norka
0 / 0 / 0
Регистрация: 14.04.2011
Сообщений: 3
15.04.2011, 16:25  [ТС]     Абстрактные классы, наследование #8
Спасибо всем=) Все работает
Ma3a
Эксперт C++
616 / 460 / 31
Регистрация: 28.01.2011
Сообщений: 605
15.04.2011, 16:25     Абстрактные классы, наследование #9
Norka, не забудьте только потом соответствующие delete для освобождения памяти поставить.
outoftime
║XLR8║
508 / 430 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
15.04.2011, 16:38     Абстрактные классы, наследование #10
Ma3a, не знаешь, если есть вектор
C++
1
vector<vector<Cell *>> *m_cells;
Можно освобождать его так:
C++
1
m_cells->clear();
Или надо очищать вручную все указатели на классы? (точнее память под классы, на которые указывают указатели)
Ma3a
Эксперт C++
616 / 460 / 31
Регистрация: 28.01.2011
Сообщений: 605
15.04.2011, 16:43     Абстрактные классы, наследование #11
outoftime, очищать указатели надо вручную.

Добавлено через 3 минуты
или как вариант сделать std::vector<std::vector<std::auto_ptr<Cell> > >, тогда можно и вызовом clear() очищать, при очистке вектора будут вызваны деструкторы для каждого auto_ptr и память из под объектов освободится автоматически.
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
15.04.2011, 16:51     Абстрактные классы, наследование #12
Цитата Сообщение от Ma3a Посмотреть сообщение
или как вариант сделать std::vector<std::vector<std::auto_ptr<Cell> > >, тогда можно и вызовом clear() очищать, при очистке вектора будут вызваны деструкторы для каждого auto_ptr и память из под объектов освободится автоматически.
Объекты std::auto_ptr нельзя хранить в стандартных контейнерах из-за побочных эффектов при их копировании и писваивании.
outoftime
║XLR8║
508 / 430 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
15.04.2011, 16:53     Абстрактные классы, наследование #13
Ma3a, А можно как-то модифицировать вызов деструкторов, что-бы удалять данный по ссылке?
Ma3a
Эксперт C++
616 / 460 / 31
Регистрация: 28.01.2011
Сообщений: 605
15.04.2011, 16:55     Абстрактные классы, наследование #14
Mr.X, точно, совсем из головы вылетело
тогда насколько я знаю только boost::shared_ptr поможет

Добавлено через 2 минуты
outoftime, не слишком ясно, о чем вы, но если по поводу моего поста с auto_ptr, то это я погорячился, лучше оставьте пока обычные указатели и потом просто вручную освободите указатели.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2011, 21:45     Абстрактные классы, наследование
Еще ссылки по теме:

Абстрактные классы - C++
Народ, вопрос есть такой. Есть абстрактный класс class A { protected: int a; public: A(int b=0):a(b) {

Абстрактные классы - C++
В общем есть у нас 2 абстрактных класса CA и CB и 2 дочерних от них класса CC и CD. Как сделать так чтобы CD наследовал CB поверх которого...

Абстрактные классы - C++
Помогите плиз, экзаменационное задание, а разобраться не могу с ним: Создать консольное приложение, в котором реализовать работу...

Абстрактные классы - C++
Ребята! Помогите с таким делом. Мне дали задание создать абстрактный класс Автомобиль, классы наследники: гоночный автомобиль, асфальтный...

Абстрактные классы - C++
Объясните пожалуйста почему это не работает и как исправить? cannot declare variable 'b1' to be of abstract type 'classB' because the...


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

Или воспользуйтесь поиском по форуму:
outoftime
║XLR8║
508 / 430 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
15.04.2011, 21:45     Абстрактные классы, наследование #15
Можете пример с boost::shared_ptr навести?
Yandex
Объявления
15.04.2011, 21:45     Абстрактные классы, наследование
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru