try-catch, копирование во внутренний объект
От: Аноним  
Дата: 12.11.10 23:01
Оценка:
Как так получается, что у внутреннего объекта при создании для базового класса вызывается обычный конструктор, а у его наследника конструктор копирования

static int i;

class A {
public:
    A() : num(i) { wcout << i++ << _T("A c-tor\n"); }
    A(const A&) : num(i) { wcout << i++ << _T("A copy c-tor\n"); }
    ~A() { wcout << num << _T("A d-tor\n"); }
    int num;
};

class B : public A {
public:
    B() : num(A::num) { wcout << num << _T("B c-tor\n"); }
    B(const B&) : num(A::num) { wcout << num << _T("B copy c-tor\n"); }
    ~B() { wcout << num << _T("B d-tor\n"); }
    int num;
};

int _tmain(int argc, _TCHAR* argv[])
{
    try {
        B b;
        throw b;
    } catch(A a) {
        wcout << _T("In a catch\n");
    } catch(B b) {
        wcout << _T("In b catch\n");
    }

    return 0;
}
Re: try-catch, копирование во внутренний объект
От: Vain Россия google.ru
Дата: 13.11.10 01:22
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Как так получается, что у внутреннего объекта при создании для базового класса вызывается обычный конструктор, а у его наследника конструктор копирования


А>
А>static int i;

А>class A {
А>public:
А>    A() : num(i) { wcout << i++ << _T("A c-tor\n"); }
А>    A(const A&) : num(i) { wcout << i++ << _T("A copy c-tor\n"); }
А>    ~A() { wcout << num << _T("A d-tor\n"); }
А>    int num;
А>};

А>class B : public A {
А>public:
А>    B() : num(A::num) { wcout << num << _T("B c-tor\n"); }
А>    B(const B&) : num(A::num) { wcout << num << _T("B copy c-tor\n"); }
А>    ~B() { wcout << num << _T("B d-tor\n"); }
А>    int num;
А>};

А>int _tmain(int argc, _TCHAR* argv[])
А>{
А>    try {
А>        B b;
А>        throw b;
А>    } catch(A a) {
А>        wcout << _T("In a catch\n");
А>    } catch(B b) {
А>        wcout << _T("In b catch\n");
А>    }

А>    return 0;
А>}
А>


Потому-что вы его и не вызвали:
B(const B& b) : A(b), num(A::num) { wcout << num << _T("B copy c-tor\n"); }
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.