Re[3]: Что не наследуется от базового класса?
От: wvoquine  
Дата: 13.06.11 18:49
Оценка:
Здравствуйте, blacksun, Вы писали:

B>К приватным нет прямого доступа, но это не значит что они не наследуются.



Да, понял уже: есть, типа, включение, а есть — наследование
К тому же тут хороший пример с дружбой привели.
To be is to be the value of a variable
Re[3]: Что не наследуется от базового класса?
От: wvoquine  
Дата: 13.06.11 19:09
Оценка:
Могу в довершение свой пример привести: http://ideone.com/bsYPI
Как же я мог подумать, что не наследуется!?
To be is to be the value of a variable
Re[3]: Что не наследуется от базового класса?
От: wvoquine  
Дата: 13.06.11 19:25
Оценка:
Могу в довершение свой пример привести: http://ideone.com/osBzo
Как же я мог подумать, что не наследуется!?
To be is to be the value of a variable
Re[4]: Что не наследуется от базового класса?
От: wvoquine  
Дата: 13.06.11 19:30
Оценка:
Здравствуйте, wvoquine, Вы писали:

W>Могу в довершение свой пример привести: http://ideone.com/osBzo

W>Как же я мог подумать, что не наследуется!?

Хотя не знаю, насколько этот пример именно о наследовании
To be is to be the value of a variable
Re[2]: Что не наследуется от базового класса?
От: blacksun  
Дата: 13.06.11 21:29
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>Здравствуйте, blacksun, Вы писали:


B>>Задали вопрос на собеседовании, я до сих пор в сомнениях. Ответил что все наследуется, хотя сейчас сомнительно насчет недефолтовых конструкторов.


AG>дружба не наследуется.


А как же это работает тогда:



class FT;
class FT2;
class BestFr
{
public:

    void func(FT2 & ft);

};

class FT
{
    int m_x;

    friend class BestFr;
    //friend void BestFr::func(FT &);


};

class FT2 : public FT
{

};



void BestFr::func(FT2 & ft)
{
    ft.m_x = 99;
}


int _tmain(int argc, _TCHAR* argv[])
{
    FT2 ft2;

    BestFr bf;

    bf.func(ft2); // после вызова в ft2.m_x лежит 99 !!!

    return 0;
}
Re[3]: Что не наследуется от базового класса?
От: wvoquine  
Дата: 14.06.11 05:29
Оценка:
Здравствуйте, blacksun, Вы писали:

B>Здравствуйте, Alexander G, Вы писали:


AG>>Здравствуйте, blacksun, Вы писали:


B>>>Задали вопрос на собеседовании, я до сих пор в сомнениях. Ответил что все наследуется, хотя сейчас сомнительно насчет недефолтовых конструкторов.


AG>>дружба не наследуется.


B>А как же это работает тогда:




B>
B>class FT;
B>class FT2;
B>class BestFr
B>{
B>public:

B>    void func(FT2 & ft);

B>};

B>class FT
B>{
B>    int m_x;

B>    friend class BestFr;
B>    //friend void BestFr::func(FT &);


B>};

B>class FT2 : public FT
B>{

B>};



B>void BestFr::func(FT2 & ft)
B>{
B>    ft.m_x = 99;
B>}


B>int _tmain(int argc, _TCHAR* argv[])
B>{
B>    FT2 ft2;

B>    BestFr bf;

B>    bf.func(ft2); // после вызова в ft2.m_x лежит 99 !!!

B>    return 0;
B>}

B>




Наследование интерфейса, нафиг!
Похоже, наследование приватных данных проходит как часть наследования реализации.
Но дружба ломает эту парадигму, и сама криво наследуется.
Видимо, друга базового класса нужно понимать как нечто вроде части реализации базового класса.
To be is to be the value of a variable
Re[3]: Что не наследуется от базового класса?
От: rg45 СССР  
Дата: 14.06.11 05:57
Оценка: 1 (1)
Здравствуйте, blacksun, Вы писали:

AG>>дружба не наследуется.


B>А как же это работает тогда:

B>...


"Дружба не наследуется" нужно понимать так, что друзья базового класса не являются автоматически друзьями производных. В приведенном тобой примере друг базового класса получает доступ к закрытому члену базового же класса, так что все правильно. Доступ же к закрытым членам производного класса закрыт для друга базового:

class FT
{
private:
    int m_x;
    friend int main();
};
 
class FT2 : public FT
{
private:
    int m_y;
};
 
int main()
{
  FT2 ft2;
  ft2.m_x = 555; //Ok: 'FT::m_x' is private and 'main' is friend of 'FT'
  ft2.m_y = 777; //error: 'FT2::m_y' is private and 'main' is not friend of 'FT2'
}
--
Re[4]: Что не наследуется от базового класса?
От: wvoquine  
Дата: 14.06.11 07:12
Оценка:
W>Видимо, друга базового класса нужно понимать как нечто вроде части реализации базового класса.

В смысле, реализацию друга
To be is to be the value of a variable
Re[4]: Что не наследуется от базового класса?
От: wvoquine  
Дата: 14.06.11 07:14
Оценка:
Здравствуйте, rg45, Вы писали:


R>"Дружба не наследуется" нужно понимать так, что друзья базового класса не являются автоматически друзьями производных. В приведенном тобой примере друг базового класса получает доступ к закрытому члену базового же класса, так что все правильно. Доступ же к закрытым членам производного класса закрыт для друга базового...



Наверное, лучше это всё же описывается в терминах наследования реализации/наследования интерфейса. Тогда это не похоже на какую-то дыру
To be is to be the value of a variable
Re: Что не наследуется от базового класса?
От: wvoquine  
Дата: 15.06.11 11:42
Оценка:
Здравствуйте, blacksun, Вы писали:

B>Задали вопрос на собеседовании, я до сих пор в сомнениях. Ответил что все наследуется, хотя сейчас сомнительно насчет недефолтовых конструкторов.


А не следует ли на такой вопрос отвечать вопросом: What's In Class?
To be is to be the value of a variable
Re[4]: Что не наследуется от базового класса?
От: jyuyjiyuijyu  
Дата: 15.06.11 12:03
Оценка:
а помоему это идиотский вопрос можно хорошего кандидата отсеять
а какого нибудь зубрилку ботаника взять

я бы просил написать код основных структур данных списки деревья плюс
по специальности если он tcp/ip кодер то написать сервер клиент с определенными
тех требованиями к нагрузке и смотрел бы на качество кода на стиль
на поведение интересный человек увлечен своим делом или нет спросил бы есть
ли у него свои проекты чтоб показал мне же с ним работать придется

а спрашивать такую ересь чистой воды бредятина ну знает он и что
тот кто не знает прочитает и через пять минут тоже будет знать
вообще не показатель этот вопрос
Re[5]: Что не наследуется от базового класса?
От: rg45 СССР  
Дата: 15.06.11 13:10
Оценка: +1
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>а помоему это идиотский вопрос можно хорошего кандидата отсеять

J>а какого нибудь зубрилку ботаника взять

Ну из того, что вопрос идиотский, вовсе не следует, что проводящий собеседование тоже идиот.
--
Re: Что не наследуется от базового класса?
От: MasterZiv СССР  
Дата: 29.06.11 06:48
Оценка:
On 11.06.2011 0:40, blacksun wrote:

> Задали вопрос на собеседовании, я до сих пор в сомнениях. Ответил что все

> наследуется, хотя сейчас сомнительно насчет недефолтовых конструкторов.

Конструкторы, деструктор, оператор присваивания.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Что не наследуется от базового класса?
От: MasterZiv СССР  
Дата: 29.06.11 06:49
Оценка:
On 11.06.2011 1:49, rg45 wrote:

>

> Ну, во-первых, не наследуются функции-члены, автоматически генерируемые
> компилятором: копирующий оператор присваивания и деструктор; а во-вторых, не
> наследуются конструкторы, причем, не только автоматически генерируемые —
> копирующий и по умолчанию — а, наверное, можно сказать, что все.

Да просто ВСЕ конструкторы и деструктор. И оператор присваивания.
Не важно, как они сделаны, автоматически или вручную.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Что не наследуется от базового класса?
От: Юрий Жмеренецкий ICQ 380412032
Дата: 30.06.11 23:49
Оценка: 5 (1)
Здравствуйте, rg45, Вы писали:

R>... а во-вторых, не наследуются конструкторы, причем, не только автоматически генерируемые — копирующий и по умолчанию — а, наверное, можно сказать, что все.


В C++0x конструкторы могут наследоваться (подробнее здесь, или 12.9 в драфте), хотя уже поступают предложения об удалении этой возможности.
Re[3]: Что не наследуется от базового класса?
От: Masterkent  
Дата: 01.07.11 05:30
Оценка: 4 (1)
Юрий Жмеренецкий:

ЮЖ>В C++0x конструкторы могут наследоваться (подробнее здесь, или 12.9 в драфте), хотя уже поступают предложения об удалении этой возможности.


Предложения об удалении на данный момент уже не актуальны:
Closed Issue 1150. Inheriting constructors have not been implemented
Re[2]: Что не наследуется от базового класса?
От: chijo Россия  
Дата: 01.07.11 06:47
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>On 11.06.2011 0:40, blacksun wrote:


>> Задали вопрос на собеседовании, я до сих пор в сомнениях. Ответил что все

>> наследуется, хотя сейчас сомнительно насчет недефолтовых конструкторов.

MZ>Конструкторы, деструктор, оператор присваивания.



Конструкторы, деструкторы, оператор присваивания и друзья.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.