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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.69
Lindeman1976
0 / 0 / 0
Регистрация: 26.11.2011
Сообщений: 6
#1

Инициализация массива объектов - C++

13.04.2012, 12:13. Просмотров 2045. Ответов 2
Метки нет (Все метки)

Уважаемые программисты, проясните ситуацию.

Имеется класс CPt (точка), причем конструктор по умолчанию отсутствует.
Объявление класса CPt:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class CPt
{
    short x;
    short y;
public:
    CPt(short set_x/*=0*/, short set_y/*=0*/):x(set_x),y(set_y) {}
    CPt(const CPt& copy);
    short GetX() const;
    short GetY() const;
    void SetX(short x_set);
    void SetY(short y_set);
    void Move(short dx, short dy);
    void Draw() const;
};
Далее имеется класс Line (линия), унаследованный от виртуального базового класса CShape (фигура).
Класс Line содержит массив объектов CPt (массив точек):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//Виртуальный базовый класс фигур
class CShape 
{
public:
    virtual CShape* move(short dx, short dy)=0;
    virtual void Draw() const =0;
};
 
class Line: public CShape 
{
    static const short nPts=2; //Количество точек, задающих линию
    CPt mPts[nPts]; //Массив, содержащий крайние точки линии
public:
    Line() {}
    Line(short x1, short x2, short y); //Конструктор, создает горизонтальную линию
    Line(const Line& source);
    Line& operator = (const Line& other);
    CShape* move(short dx, short dy);
    void Draw() const;
};
Вопрос в следующем: существует ли способ инициализации объекта класса Line, если у CPt отсутствует конструктор по умолчанию?
Проблема в том, что объекты CPt (точки) входят в состав Line в виде массива, кторый через список инициализации не проинициализируешь.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.04.2012, 12:13     Инициализация массива объектов
Посмотрите здесь:

Инициализация массива объектов через конструктор - C++
class some { public: some(){} some(int b):a(b){} void Set(int b){a=b;} private: int a; };

Инициализация объектов класса - C++
Доброго всем времени суток! У Бьерн Страуструп увидел вот такую конструкцию class date { int month, day, year; ...

Инициализация объектов в структуре - C++
Нужно с помощью структуры создавать несколько объектов LabeledEdit и ComboBox, вопрос в том как и где инициализировать объекты , попробовал...

Инициализация объектов класса - C++
Помогите, пожалуйста написать, с этим у меня тяжко хоть это и азы... Создайте 3 экземпляра класса и инициализируйте с помощью: а)...

Инициализация объектов разными типами - C++
Дана такая main: int main() { C c1(6), c2 = 5, c3(c1 + c1); return 0; } Нужно определить класс С так, чтобы ошибочным было...

Инициализация статических объектов без конструктора - C++
Что-то я как ни вертел этот код, он у меня не заработал. Как я понял, смысл в том что не надо определять initialized, хотя без этого...

Инициализация объектов через конструктор(объясните в чём ошибка) - C++
Вот программа! #include <iostream> #include <string> using namespace std; class GradeBook { public: GradeBook(); ...

Инициализация массива - C++
Нужно объявить несколько статических строк, содержащих байты со значениями в диапазоне от 1 до 255 Пытаюсь что-то в этом духе: ...

Инициализация массива - C++
int ** mas, n; cout << "Введите порядок треугольника паскаля: " << endl; cin >> n; mas = new int * ; for (int i = 0; i < n;...

Инициализация двумерного массива - C++
Подскажите пожалуйста как проинициализировать двумерный массив размером 10 на 10.(самый простой пример)

Инициализация комплексного массива - C++
Подскажите как правильно проинициализировать элементы двухмерного комплексного массива. По заданию нужно чтобы с клавиатуры вводилась...

Инициализация двумерного массива - C++
Чет не понимаю на что возмущается компилятор... Заполняю как и заполнял раньше... char my_array; int x = 0; int t = 2; for(; x < 2;...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
maximkou
368 / 43 / 1
Регистрация: 11.04.2012
Сообщений: 149
Записей в блоге: 1
13.04.2012, 12:28     Инициализация массива объектов #2
class Cpt: public CShape
Lindeman1976
0 / 0 / 0
Регистрация: 26.11.2011
Сообщений: 6
13.04.2012, 14:32  [ТС]     Инициализация массива объектов #3
Если я правильно понял, Вы предлагаете сделать класс CPt производным от CShape?
То есть код должен быть примерно таким:

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
//Виртуальный базовый класс фигур
class CShape {
public:
    virtual CShape* move(short dx, short dy)=0;
    virtual void Draw() const =0;
};
 
class CPt: public CShape {
    short x;
    short y;
public:
    CPt(short set_x/*=0*/, short set_y/*=0*/):x(set_x),y(set_y) {}
    CPt(const CPt& copy);
    short GetX() const;
    short GetY() const;
    void SetX(short x_set);
    void SetY(short y_set);
    CShape* move(short dx, short dy);
    void Draw() const;
};
 
class Line: public CShape {
    static const short nPts=2; //Количество точек, задающих линию
    CPt mPts[nPts]; //Массив, содержащий крайние точки линии
public:
    Line() {}
    Line(short x1, short x2, short y); //Конструктор, создает горизонтальную линию
    Line(const Line& source);
    Line& operator = (const Line& other);
    CShape* move(short dx, short dy);
    void Draw() const;
};
Но это не решает проблему.
Все равно, если в CPt нет конструктора по умолчанию, то компилятор ругается на его отсутствие и код не компилируется.
Как только в конструкторе CPt мы снимаем комментарии (добавляем значения по умолчанию), все компилируется и работает, как в первом, так и во втором варианте.
Здесь класс CShape вообще не обязателен.
Вопрос в том, можно ли инициализировать массив объектов класса A, входящий в объект класса B, если для класса A нет конструктора по умолчанию.
Yandex
Объявления
13.04.2012, 14:32     Инициализация массива объектов
Ответ Создать тему
Опции темы

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