閱讀579 返回首頁    go 阿裏雲 go 技術社區[雲棲]


[麵試題]構造函數

(1)
class Person{
    Person(int age){
    }
};
class Student:Person{
};
int main(){
    Student student;
}

A、Compile-time error at 5. 

B、Compile-time error at 1. 

C、The compiler attempts to create a default constructor for class B. 

D、The compiler attempts to create a default constructor for class A.

解析:A

報錯:error: no matching function for call to 'Person::Person()“

原因是因為子類Student中沒有定義構造方法,那麼就會有一個默認的無參構造方法,我們知道,在創建子類對象的時候,會調用父類的構造方法無參構造方法,因為Person類定義了一個帶參數的構造方法,所以無參構造方法被覆蓋了,所以在第5行會報A類中沒有無參構造方法。
隻要給Person定義一個無參構造方法就行了。

class Person{
    Person(int age){
    };
    public:
        Person(){
        };
};

class Student:Person{
};

(2)構造函數的初始化列表

class Person{
    private:
        int b;
        const int c;
        int &d;
    public:
        Person(int a);
};

Person::Person(int a){
    b = a;
    c = a;
    d = a;
}
報錯:

error: uninitialized member 'Person::c' with 'const' type 'const int'

error: uninitialized reference member 'Person::d'

error: assignment of read-only data-member 'Person::c'
解析:可以初始化const對象或引用類型對象,但不能對他們進行賦值。在開始執行構造函數的函數體之前,要完成初始化。初始化const對象或引用類型對象

唯一的一個機會是在構造函數初始化列表中。

正確方式:

Person::Person(int a):b(a),c(a),d(a){

}




最後更新:2017-04-03 05:40:17

  上一篇:go [Python學習] 專題一.函數的基礎知識
  下一篇:go Asmack開發係列之XMPP基礎