構造関数の誤解
1262 ワード
まずコードを見てください.
以前にパラメータなしで呼び出されたコンストラクション関数は、次のようになります.
B b;
の呼び出し方法は、パラメータがある場合は
B c(1);
地が呼び出す.
B t();の呼び出し方式は、Bとt;の効果は同じですが、実はそうではありません.の
B t();戻り値がBであることを宣言した関数に相当し,Bの構造関数とは少しも関係がない.
したがって、このコードの出力は次のとおりです.
----1----
----2----
A()
B()
~B()
~A()
#include <iostream>
using namespace std;
class A {
public:
A() {
cout << "A()" << endl;
}
~A() {
cout << "~A()" << endl;
}
};
class B : public A {
public:
B() {
cout << "B()" << endl;
}
~B() {
cout << "~B()" << endl;
}
B(int a) {
cout << "int a" << endl;
}
};
B func() {
cout << "A function" << endl;
return B();
}
int main() {
cout << "----1----" << endl;
B t();
cout << "----2----" << endl;
B();
//B b;
//B c(1);
return 0;
}
以前にパラメータなしで呼び出されたコンストラクション関数は、次のようになります.
B b;
の呼び出し方法は、パラメータがある場合は
B c(1);
地が呼び出す.
B t();の呼び出し方式は、Bとt;の効果は同じですが、実はそうではありません.の
B t();戻り値がBであることを宣言した関数に相当し,Bの構造関数とは少しも関係がない.
したがって、このコードの出力は次のとおりです.
----1----
----2----
A()
B()
~B()
~A()