2015 Tencentオンラインシミュレーションテスト問題

1555 ワード

第1題の次のプログラムの出力結果は:
A. 134122
B. 123412
C. 14302012
D. 143212
#include <iostream>

using namespace std;



class Base

{

public:
Base(int i){cout << i;} ~Base(){} }; class Base1:virtual public Base { public: Base1(int i, int j=0):Base(j){cout <<i;} ~Base1(){} }; class Base2:virtual public Base { public: Base2(int i, int j=0):Base(j){cout <<i;} ~Base2(){} }; class Derived:public Base2, public Base1 { public: Derived(int a, int b, int c, int d ):mem1(a), mem2(b), Base1(c), Base2(d), Base(a) {cout << b;} private: Base2 mem2; Base1 mem1; }; void _tmain(int argc, _TCHAR* argv[]) { Derived objD(1, 2, 3, 4); int i; cin >> i; }

この問題は派生クラスの構造関数,多重継承,虚基クラスの概念を調べた.
概念1:初期化について、派生クラスは初期化時に必ずベースクラスのコンストラクション関数を呼び出します.ベースクラスにデフォルトコンストラクション関数(パラメータなしまたはパラメータにデフォルト値がある場合)がない限り.その一般的な形式は「DelivedClass(ParaList):BaseClass(ParaList){Initialization Statement}」である.
概念2:派生クラス構造関数を実行する順序は(構造関数とは反対)、ベースクラス構造関数->サブオブジェクト構造関数(複数のサブオブジェクトが宣言に従って前後して初期化)->派生クラス構造関数である.
概念3:多重継承について、派生クラスを宣言する際、ベースクラスの出現順序は構造関数の呼び出し順序を決定する.派生クラスは直接ベースクラスを初期化するだけで、間接ベースクラスは相応の直接ベースクラスを持って初期化し、虚ベースクラスを除く.
概念4:ダミーベースクラスについては,派生クラスは直接ベースクラスのみならず,ダミーベースクラスも初期化する.C++は、ダミーベースクラスが複数回初期化されず、派生クラスによって一度だけ継承されることを保証する(メンバーの重複を避ける).
以上の概念に基づいて、正しい答えを簡単に出すことができます.
 
第2題データ要素シーケンス10,11,12,5,6,7,20,2が以下のソートアルゴリズムのいずれかを用いて得られた第2題ソート後の結果であれば、このソートアルゴリズムは
A発泡ソート
B選択ソート
C 2ウェイ集計ソート
D挿入ソート
 
未完待機.