Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: инициализация объекта\указателя конструктором потомка  (Прочитано 3062 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Mayor
Специалист

ru
Offline Offline

« : 22-08-2009 07:49 » 

инициализация объекта\указателя конструктором потомка

есть 2 абстрактных класса:
Код:
#ifndef window_cairo__HH
#define window_cairo__HH

struct point {
int x;
int y;
point(int a=0,int b=0) : x(a),y(b) { } ;
};
class window {
public:
virtual point current() =0 ;
virtual void current(const point& p) = 0;
virtual void line(const point& p) =0;
virtual void paint()=0;
virtual ~window() { }
};
#endif

#ifndef cairo_window___HH
#define cairo_window___HH
#include "window.h"
#include  <cairo.h>
class cairo_window : public window {
protected: //must be initialized in derived constructor
cairo_t *cr;
point p;
public:
point current();
void current(const point& cp) ;
void line(const point& p1) ;
};
#endif

cairo_window - полюбому не сможет проинициализировать cr, является ли это дефектом планирования иерархии классов?
насколько считаеться приемлимым инициализировать встроенные объекты класса, конструктором потомка?
насколько это приемлимо, если класс является частично абстрактным?

если имеется наследуемый класс:
Код:
#ifndef xlib_window__HH
#define xlib_window__HH
#include "cairo_window.h"
#include<cairo-xlib.h>
class xlib_cairo_window : public cairo_window {
Display *dpy;
Window rootwin;
Window win;
int scr;
// cairo_t *cr;
cairo_surface_t *surface;
// point p;
public:
xlib_cairo_window(int x=500,int y=300,const char* pc="hello");
// virtual point current();
// virtual void current(const point& cp);
// virtual void line(const point& p) ;
virtual void paint();
virtual ~xlib_cairo_window();
};
#endif

имеет ли смысл инициализировать p в нем, если cairo_window по большому счету особенно не требуется конструктор?

если сравнивнивать 2 иерархии
class cairo_window : public window
class xlib_cairo_window : public cairo_window
и
сlass window
class xlib_window
class xlib_cairo_window: protected xlib_window, public window

то какие приемущества и недостатки у обоих подходов?
« Последнее редактирование: 22-08-2009 08:10 от Mayor » Записан

1n c0de we trust
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines