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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.07.2011, 10:21   #1
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию Создание объектов класса при private-наследовании

Вот, в разделе "Вакансии" в Яндексе есть такой пример:
Код:
class Foo
{
public:
    Foo(int j) { i=new int[j]; }
    ~Foo() { delete i; }
private:
    int* i;
};

class Bar: Foo
{
public:
    Bar(int j) { i=new char[j]; }
    ~Bar() { delete i; }
private:
    char* i;
};


void main()
{
    Foo* f=new Foo(100);
    Foo* b=new Bar(200);
    *f=*b;
    delete f;
    delete b;
}
Да, сами видите, прорва ошибок.
Подправил так:
Код:
class Foo
{
public:
    Foo() = default;
    Foo(int j) { i=new int[j]; }
    virtual ~Foo() { delete[] i; }
private:
    int* i;
};

class Bar: Foo
{
public:
    Bar(int j) { i=new char[j]; }
    virtual ~Bar() { delete[] i; }
private:
    char* i;
};


int main()
{
    Foo* f=new Foo(100);
    Foo* b=new Bar(200);
    *f=*b;
    delete f;
    delete b;
    return 0;
}
Но, опять же, есть ещё кое-что.
Код:
Foo* b=new Bar(200);
Компилятор говорит, что нельзя создать этот объект.
Т.е., как я понимаю, если при private наследовании так делать нельзя? Потому как если сделать так
Код:
class Bar: public Foo
То всё отлично работает.

P.S. Да, знаю, что в коде я ещё не всё исправил.

Последний раз редактировалось _-Re@l-_; 30.07.2011 в 12:00.
_-Re@l-_ вне форума Ответить с цитированием
Старый 30.07.2011, 12:17   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

private наследование - наследование реализации, а не интерфеса. т.е для внутреннего использования класса

Цитата:
Foo() = default;
это что?
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 30.07.2011, 12:52   #3
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Цитата:
это что?
Это из стандарта С++'09 - возврат конструктора по умолчанию, если уже есть конструктор с параметрами.
Цитата:
private наследование - наследование реализации, а не интерфеса. т.е для внутреннего использования класса
хм, ясно, учту. Спасибо.
_-Re@l-_ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сбой при получении производства объектов класса COM для компонента с CLSID Vistar Общие вопросы .NET 3 10.07.2011 23:31
Как вызываются конструкторы объектов при наследовании? TwiX Общие вопросы C/C++ 10 17.11.2010 13:59
создание объектов класса Serjuk Общие вопросы C/C++ 8 13.05.2010 18:54
Создание объектов класса в цикле Formdet Общие вопросы .NET 4 23.04.2010 21:43
Перегрузка == при наследовании paramon Общие вопросы C/C++ 5 17.06.2008 00:17