Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

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

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

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

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

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

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

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

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

16
IrineK
Заблокирован
14.04.2011, 16:36 #2
Дейтель, Харви и Пол. Как программировать на С++
Глава 10.9. Очень близкий пример.
1
igorrr37
1648 / 1276 / 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;
}
1
Norka
0 / 0 / 0
Регистрация: 14.04.2011
Сообщений: 3
15.04.2011, 15:47  [ТС] #4
Благодарю, но возник еще вопросик...
Компилятор ругается на строчку
C#
1
Shape* arr[size];
Пишит что хочет константное вырожение, ну если сделать константу то все работает, а как сделать не константой?
0
outoftime
║XLR8║
511 / 433 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
15.04.2011, 16:06 #5
C++
1
Shape *arr = new Shape[size];
1
Ma3a
Эксперт С++
618 / 462 / 31
Регистрация: 28.01.2011
Сообщений: 605
15.04.2011, 16:09 #6
outoftime, тогда скорее вот так
C++
1
Shape ** arr = new Shape*[size];
1
Lavios
62 / 62 / 2
Регистрация: 27.01.2011
Сообщений: 250
15.04.2011, 16:25 #7
Для справки первый вариант не работает=) Второй нормальный=)
1
Norka
0 / 0 / 0
Регистрация: 14.04.2011
Сообщений: 3
15.04.2011, 16:25  [ТС] #8
Спасибо всем=) Все работает
0
Ma3a
Эксперт С++
618 / 462 / 31
Регистрация: 28.01.2011
Сообщений: 605
15.04.2011, 16:25 #9
Norka, не забудьте только потом соответствующие delete для освобождения памяти поставить.
0
outoftime
║XLR8║
511 / 433 / 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();
Или надо очищать вручную все указатели на классы? (точнее память под классы, на которые указывают указатели)
0
Ma3a
Эксперт С++
618 / 462 / 31
Регистрация: 28.01.2011
Сообщений: 605
15.04.2011, 16:43 #11
outoftime, очищать указатели надо вручную.

Добавлено через 3 минуты
или как вариант сделать std::vector<std::vector<std::auto_ptr<Cell> > >, тогда можно и вызовом clear() очищать, при очистке вектора будут вызваны деструкторы для каждого auto_ptr и память из под объектов освободится автоматически.
0
Mr.X
Эксперт С++
3051 / 1696 / 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 нельзя хранить в стандартных контейнерах из-за побочных эффектов при их копировании и писваивании.
0
outoftime
║XLR8║
511 / 433 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
15.04.2011, 16:53 #13
Ma3a, А можно как-то модифицировать вызов деструкторов, что-бы удалять данный по ссылке?
0
Ma3a
Эксперт С++
618 / 462 / 31
Регистрация: 28.01.2011
Сообщений: 605
15.04.2011, 16:55 #14
Mr.X, точно, совсем из головы вылетело
тогда насколько я знаю только boost::shared_ptr поможет

Добавлено через 2 минуты
outoftime, не слишком ясно, о чем вы, но если по поводу моего поста с auto_ptr, то это я погорячился, лучше оставьте пока обычные указатели и потом просто вручную освободите указатели.
0
outoftime
║XLR8║
511 / 433 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
15.04.2011, 21:45 #15
Можете пример с boost::shared_ptr навести?
0
15.04.2011, 21:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.04.2011, 21:45
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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