C 面試題 之物件導向

2022-02-22 12:58:42 字數 2691 閱讀 9092

說到物件導向,大家第一反應應該就是它的三大特性:封裝性、繼承性和多型性。那麼我們先簡單的了解一下這三大特性:

(1)封裝性:封裝,也就是把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。

在c++中類中成員的屬性有:public, protected, private,這三個屬性的訪問許可權依次降低。

(2)繼承性:繼承是指這樣一種能力:它可以使用現有類的所有功能,並在無需重新編寫原來的類的情況下對這些功能進行擴充套件。

(3)多型性:多型性(polymorphisn)是允許你將父物件設定成為和乙個或更多的他的子物件相等的技術,賦值之後,父物件就可以根據當前賦值給它的子物件的特性以不同的方式運作。簡單的說,就是一句話:允許將子類型別的指標賦值給父類型別的指標。實現多型,有二種方式,覆蓋,過載。

覆蓋,是指子類重新定義父類的虛函式的做法。

過載,是指允許存在多個同名函式,而這些函式的參數列不同(或許引數個數不同,或許引數型別不同,或許兩者都不同)。

下面開始我們今天的學習。

答案:

對於乙個空類,編譯器預設產生4個成員函式:

(1)預設建構函式

(2)析構函式

(3)拷貝建構函式

(4)賦值函式

答案:

區別是class中變數預設是private,struct中的變數預設是public。class繼承預設是private繼承,而struct繼承預設是public繼承。struct可以有建構函式、析構函式,之間也可以繼承甚至是多重繼承,等等。c++中的struct其實和class意義一樣,唯一不同就是struct裡面預設的訪問控制是public,class中預設訪問控制是private。c++中存在struct關鍵字的唯一意義就是為了讓c程式設計師有個歸屬感,是為了讓c++編譯器相容以前用c開發的專案。

#includeusing namespace std;

class base

base() : m_j(0),m_i(m_j){}

int get_i()

int get_j()

};int main ()

;

解析:這道程式題存在著成員變數問題。常量必須在建構函式的初始化列表裡初始化或者將其設定成static。

答案:

正確的程式如下:

class a

;

或者:

class a

;

答案:

虛函式採用一種虛呼叫的辦法。虛呼叫是一種可以在只有部分資訊的情況下工作的機制,特別允許我們呼叫乙個只知道介面而不知道其準確物件型別的函式。但是如果要建立乙個物件,你勢必要知道物件的準確型別,因此建構函式不能為 virtual。

答案:

不行,這是因為虛函式是有代價的:由於每個虛函式的物件都必須維護乙個 v 表,因此在使用虛函式的時候會產生乙個系統開銷。如果僅是乙個很小的類,且不行派生其他類,那麼根本沒必要使用虛函式。

#includeusing namespace std;

class b

;

答案:

1、 string 的析構函式:

string::~string(void)

2、string 的建構函式:

string::string(const char *str)

else

}

3、string的拷貝建構函式:

string::string(const string &other)

4、string的賦值函式:

string & string::operate =(const string &other)

delete m_data; //釋放原有的記憶體資源

int length=strlen(other.m_data); //分配新記憶體資源,並複製內容

m_data = new char[length+1];

strcpy(m_data,other.m_data);

return *this; //返回本物件的引用

}

答案:

虛函式總是在派生類中被改寫,這種改寫被稱為「override」(覆蓋)。

override 是指派生類重寫基類的虛函式,重寫的函式必須有一致的參數列和返回值。override這個單詞好像一直沒什麼合適的中文詞彙來對應。有些人譯為「覆蓋」,還貼切一些。

overload約定成俗地被翻譯為「過載」,是指編寫乙個與自己已有函式同名但是參數列不同的函式。例如乙個函式既可以接受整型數作為引數,也可以接收浮點數作為引數。過載不是一種物件導向的程式設計,而是一種語法規則,過載與多型沒什麼直接關係。

python面試題之物件導向and內建函式

1 物件導向 2 內建函式 hash 3 內建函式 eq 1 定義乙個類,然後類中物件的屬性有 姓名,性別,年齡,部門 2 假設幾年後,內部員工轉崗了,3 到了另乙個崗位後,姓名,性別,年齡新的部門,在另乙個員工表有了新的資料 4 然後我認定,假設員工物件的姓名和性別一致,那麼我就認定這是乙個人 5...

練習之面試題。

今天繼續來做一些面試題鞏固自己所學的知識。1.將兩個鍊錶的值加起來求出新鍊錶。如 p1 1 2 3 4 5 6.p2 4 5 6 7 8 9.結果是 5 7 9 0 4 6.舉例 尾插函式。slistnode listpushback slistnode p1,int val while p3 pn...

Vue之面試題

1 說下vue資料雙向繫結的原理 2 說說vuex的作用以及應用場景 3 說說vue元件的資料通訊方式 4 vue的原始碼有看過嗎?說說vuex工作原理 5 為什麼說虛擬 dom會提高效能,解釋一下它的工作原理 6 請你詳細介紹一些 package.json 裡面的配置 7 為什麼說vue是一套漸進...