我試圖做一些練習,當我終於想到我明白了,它來了一個練習,它毀了一切。 比如我有以下類:虛擬函數C++
class A
{
public:
A() {std::cout<<"A()";}
virtual ~A(){std::cout<<"~A()";}
virtual void print() {std::cout<<"A";}
};
class B : public A
{
public:
B() {std::cout<<"B()";}
virtual ~B(){std::cout<<"~B()";}
virtual void print() {std::cout<<"B";}
};
而下面的代碼片段:
void f3()
{
A a[2];
a[1]=B();
a[1].print();
}
而結果我認爲它:
A() A()
A() B() {not sure why there is an A() too)
A - and here I really don't know because either A and B are virtual(and I have in the notebook A)
~B() ~A()
~A() ~A()
而另一代碼片段:
void f4()
{
A* a[]={new A(), new B()};
a[0]->print();
a[1]->print();
delete a[0];
delete a[1];
}
這也是一個問題。我們有
A() {here I don t know why there is an A()}
A() B()
A
B
~B() ~A()
A()
但它是正確的?爲什麼在這裏我們有A和B,而不是B和A?我的意思是,在第一個練習中,我有A,當它是B()類型時,這裏是我認爲它是正常的,但爲什麼?
y u no'A()。print(); B()。print();' – rightfold
爲了讓我們更容易理解什麼時候會發生什麼,爲什麼我只想點擊這裏的編譯器:http://ideone.com/SWiNmn在那裏您可以看到哪一行觸發了哪條語句。 – Michael
謝謝。你幫了我很多。 – Boolean