派生類的我有這樣的代碼:構造與基本實例作爲參數
#include <stdio.h>
class A
{
public:
A() { printf("A::A()\n"); }
A(const A &a) { printf("A::A(A &a)\n"); }
A &operator=(const A &a) { printf("A::operator=\n"); }
};
class B : public A
{
public:
B() { printf("B:B()\n"); }
B(const A &a) : A(a) { printf("B::B(A &a)\n"); }
B &operator=(const B &b) { printf("B::operator=\n"); }
};
int
main(int argc, char *argv[])
{
printf(">> B b1\n");
B b1;
printf(">> b2 = b1\n");
B b2 = b1;
return 0;
}
爲什麼行B b2 = b1
不會調用構造函數B::B(const A &a)
,而是調用A::A(const A &a)
?我如何告訴編譯器這樣做?
是否有錯字,或者我錯過了什麼?你明確地編寫了一個B :: operator =,它肯定會在b2 = b1期間被調用,但是它沒有實際的賦值。 – 2010-07-06 16:28:54
它永遠不會被調用,這就是爲什麼它沒有代碼。 – Leandro 2010-07-06 18:32:16