インタビュー、およびC ++クラス構造[相関関数、コピーコンストラクタ、デストラクタ、友人]

コンストラクタ:初期値をパラメータとリターン値なし、再装填することができ、複数あってもよいです

デストラクタ:オブジェクトのメモリを解放し、はパラメータと戻りのない値がオーバーロードしないべきではなく、唯一の存在

コピーコンストラクタ:オブジェクトのコピーは、その形状は参照でなければなりません


1.デフォルトの空のクラスは何かを追加します何ですか?どのように書くには?空のクラスサイズはどのくらいですか?なぜ?

1)空():デフォルトコンストラクタ

2)空(定数)空& : コピーコンストラクタ

3)〜空():デストラクタ

4)空&=(constの動作空&): 代入演算子

空のクラスサイズが1である C ++必要なので、固有のアドレスを有していなければならないクラスのインスタンスごとに、コンパイラが自動的にこのように各インスタンスは一意のメモリアドレスを持っていることを確認して、空のクラスのバイトサイズを割り当て


2.コンストラクタの実行順序?実行順序のデストラクタ

コンストラクタ:

1)親クラスのコンストラクタを複数の親クラスが存在する場合、これらの呼び出しの親クラスのコンストラクタオーダーの順序は、彼らは親クラスのサブクラスに表示されます

2)クラスオブジェクトのコンストラクタのメンバーは、複数のメンバークラス場合、これらの呼び出しの構成の順序は、クラスのメンバーは、クラスのクラスの連続メンバーとして宣言されています

3)サブクラスのコンストラクタ

デストラクタ:

1)サブクラスデストラクタ

2)クラスオブジェクトのデストラクタメンバ

3)デストラクタの親クラス


3.コンストラクタとデストラクタが例外をスローすることがありますか?

推奨しない、コンストラクタで例外ではない例外のデストラクタを投げます!

1)、コンストラクタで例外をスロー実行されませんデストラクタにつながる、メモリリークが発生し、手動でメモリを解放するか、auto_ptrはスマートポインタを使用する必要があります。デフォルトコンストラクタが終了していないので、コンストラクタが例外をスローし、デストラクタは、呼び出されませんメモリリークするように

2)、デストラクタで例外をスロー例外処理は、例外オブジェクトのデストラクタを呼び出して、それがされます無限再帰に陥り、それが必要であるデストラクタでカプセル化された異常に例外がスローされるのではなく、


4.クラスのメンバーが初期化されますか?これは速いですか?なぜ?

1)譲渡の初期化:コンストラクタで割り当てを行い、代入演算子は、データ・メンバーの良好なメモリ空間の後に割り当てられ、

2)初期設定のリスト:データメンバーは、メモリ空間を割り当てたとき、それが初期化され、コロンの後に初期化リストを使用します

より高速な初期化リスト割り当てが一時的なオブジェクトが生成されます、オブジェクトが一時的に効率化プログラムを縮小表示されます


5.あなたは、コンパイラが自動的にコピーコンストラクタと代入機能を生成して呼ばれることを避けるためにどのように停止するのですか?

1)コピーコンストラクタと割り当て機能は手動で上書きしてprivteに配置され、そしてのみ達成宣言されることはありません

手動で接続エラーを実装していないだけで宣言を製造することができ、外部のプライベートクラスまたはサブクラスと呼ばれることを避けるために生成するコンパイラを、避けるためにデフォルトを上書きする場合、このクラスのメンバ関数とフレンド関数を呼び出します

2)コピー不可クラス継承

コピーコンストラクタと代入演算子コピー不可のクラスは、コピーオブジェクトと割り当てを防ぐことができる、サブクラスによってプライベートと呼ばれていません

3)手動で削除および機能が定義された関数をオーバーライド:削除された機能は禁止する関数を呼び出し


6.什么情况下会生成默认构造函数

1)类成员含有构造函数时:为了能够调用类成员的构造函数,所以本类必须要有构造函数

2)父类中含有构造函数时:为了能够调用父类的构造函数,所以子类必须有构造函数才能调用父类的构造函数,才能初始化父类成员

3)类中含有虚函数时:对象的虚函数表指针需要通过构造函数进行初始化

4)虚继承时:指向虚基类的指针要在构造函数中被初始化

构造函数只有在被需要时才会自动生成!

编译器生成构造函数和拷贝构造函数的情况是一样的,也就是说编译器合成拷贝构造函数也是在上面四种情况下


7.类的析构函数什么时候会被调用?

1)对象生命周期结束时

2)delete指向对象的指针时,或delete指向对象的基类类型指针,而基类析构函数是虚函数时

3)对象A是对象B的成员,B的析构被调用时,A的析构函数也会被调用


8.为什么友元函数必须在类的内部进行声明?

因为编译器在编译类的时候就必须知道谁可以访问类的私有部分!所以友元函数必须在类的内部进行声明,可以在类的外部进行定义!

おすすめ

転載: www.cnblogs.com/yinbiao/p/10990796.html