剣指offer学習--初級c++面接問題
2102 ワード
では、構造関数を虚関数としてマークするとしますか?C++のコンパイラは、1つのタイプに虚関数があることを発見すると、そのタイプの虚関数テーブルを生成し、そのタイプの各インスタンスに虚関数テーブルを指すポインタを追加します.32ビットの機械では、1つのポインタが4バイトの空間を占めているので、sizeofが4であることを求める.64ビットの機器であれば、結果は8.
次のコードの実行結果を分析します.
class A
{
private:
int value;
public:
A(int n)
{
value = n;
}
A(A other)
{
value = other.value;
}
void print()
{
std::cout<<value<int main()
{
A a = 10;
A b = a;
b.print();
}
上記のコードでは、複製コンストラクタA(A other)が入力するパラメータがAの一例である.値伝達パラメータであるため、パラメータを実パラメータにコピーすると、レプリケーション構造関数が呼び出されます.したがって、コンストラクション関数の値のコピーを許可すると、レプリケーションコンストラクション関数内でレプリケーションコンストラクション関数が呼び出され、スタックオーバーフローの原因となる永続的な再帰的な呼び出しが形成されます.したがって,C++の規格では構造関数伝達パラメータのコピーは許されないため,コンパイルエラーが発生する.この問題を解決するには,構造関数をA(const A&other)に変更すること,すなわち,伝達パラメータを定数参照に変更することができる.
C++ではstructとclassを使用してタイプを定義できますが、この2つのタイプにはどのような違いがありますか?メンバー関数またはメンバー変数のアクセス権レベルが明記されていない場合、structではpublicがデフォルトであり、classではprivateがデフォルトです.ではC#では?C#とC++は違います.C#にメンバー関数またはメンバー変数のアクセス権が明記されていない場合、structとclassはprivateです.structとclassの違いはstructが定義した値タイプであり、値タイプのインスタンスがスタックにメモリを割り当てることである.classは参照タイプを定義し、参照タイプのインスタンスはスタックにメモリを割り当てます.