Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2012, 21:26   #1
MayhemWithMercy
Пользователь
 
Регистрация: 17.08.2012
Сообщений: 23
По умолчанию Наследование классов (С++)

Всем привет, интересует один вопрос по наследованию классов.

Постараюсь покомпактнее)

В общем есть класс point (точка) и его потомок circle (окружность).
Не могу понять как написать консруктор для circle, стандартный который просто копирует, вот такого плана:

Код:
circle::circle(const circle &C): point(C.getX(), C.getY()) //копирую коорд.
{
  this->R=C.R; //копирую радиус
}
Где функции getX(), getY() класса-потомка point, в общем здесь:

Код:
class point
{
  private:
    double x, y;
    
  public:
    point(double, double);
    point(const point&);
    ~point(void);

    double getX(void) {return x;};
    double getY(void) {return y;};
    void print(void);               
};
Вот, circle ведь наследует эти функции (class circle: public point)?

А в конструкторе circle (который выше, самый первый), в формальные параметры попадает вот это (const circle &C), но я не могу использовать наследуемые функции getX(), getY();

Вот на всякий случай описание самого (circle):

Код:
class circle: public point
{
  private:
    double R;
    
  public:
    circle(double, double, double);
    circle(const circle&);
    ~circle(void);
    
    void print(void);  
};
В общем как написать конструктор копирования для circle, подскажите пжлста...

Последний раз редактировалось MayhemWithMercy; 30.09.2012 в 21:30.
MayhemWithMercy вне форума Ответить с цитированием
Старый 01.10.2012, 00:38   #2
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

У константных объектов нельзя вызывать неконстантные методы.
Есть два пути:
1) Убрать слово const из объявления конструктора.
Код:
circle::circle(circle &C)
2) Сделать методы getX и getY константными:
Код:
double getX(void) const {return x;};
Второй способ правильнее.
Son Of Pain вне форума Ответить с цитированием
Старый 01.10.2012, 00:41   #3
MayhemWithMercy
Пользователь
 
Регистрация: 17.08.2012
Сообщений: 23
По умолчанию

Спасибо .
MayhemWithMercy вне форума Ответить с цитированием
Старый 01.10.2012, 10:45   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,355
По умолчанию

Цитата:
Сообщение от Son Of Pain Посмотреть сообщение
1) Убрать слово const из объявления конструктора.
Код:
circle::circle(circle &C)
Нет, это уже не будет copy constructor а обычный конструктор.
waleri вне форума Ответить с цитированием
Старый 01.10.2012, 12:08   #5
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Будет. Стандарт языка не требует тут константного параметра.
Son Of Pain вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Наследование классов WebbMan Общие вопросы C/C++ 2 21.06.2012 12:39
наследование классов Ioane Помощь студентам 0 14.04.2012 16:00
Наследование классов Serjuk Общие вопросы C/C++ 9 11.04.2010 16:25
наследование классов Dimarik Общие вопросы C/C++ 15 02.07.2009 20:00