class A {
public:
A(void) { cout << "A::A" << endl; }
A(const A& a) { cout << "A::A(a)" << endl; }
virtual ~A(void) { cout << "A::~A" << endl; }
virtual void g(void) { cout << "A::g" << endl; }
};
class B : public A {
public:
B(void) { cout << "B::B" << endl; }
~B(void) { cout << "B::~B" << endl; }
void g(void){ cout << "B::g" << endl; }
};
void print(A c) {
cout << "print" << endl;
}
int main(void) {
A a;
B b;
A* c = &b;
c->g();
print(*c);
return 0;
}
Я не понимаю, почему это утверждение выполняется A::A(a)
прибудет при вызове c->g()
или print(*c);
Зачем и когда выполняется конструктор перегрузки?
И я не совсем уверен, какая часть программки делает метод печать принадлежит?
'print' - это не метод, это бесплатная функция. Он принадлежит к той же «части», что и «главная». «A :: A (a)» не печатается, когда вы вызываете 'c-> g()' в этой программе. (И, чтобы быть придирчивым, «A :: A (a)» 'не является утверждением.) – molbdnilo
Ваша' print' принимает аргумент по значению, поэтому необходимо сделать копию. –
Вы передаете значение функции 'print'. В результате вызывается конструктор копирования 'A :: A (const & A)'. – Vishal