面試題(八)

python面向對象

http://www.imooc.com/article/3066

python內沒有new關鍵字
python類方法的定義時第一個參數一定是self
@classmethod是類方法,傳入的參數一定有cls
@property是對象屬性的另一種定義方式,調用時不需要加上()。並且只有一個參數self

C++的構造函數和析構函數調用順序

http://www.cnblogs.com/Aion/p/3429515.html

C++中構造函數的順序是
1)如果某個類具體基類,執行基類的默認構造函數。

(2)類的非靜態數據成員,按照聲明的順序創建。

(3)執行該類的構造函數。

即構造類時,會先構造其父類,然後創建類成員,最後調用本身的構造函數。
C++中析構函數的順序是正好和構造函數反過來。

C++ union類型

http://www.cnblogs.com/xdotnet/archive/2011/04/20/cpp_union.html

union主要是共享內存,分配內存以其最大的結構或對象爲大小,即sizeof最大的。

32位系統和64位系統區別

這裏寫圖片描述
指針不論是什麼類型在32位系統都佔4字節,64位系統佔8字節。

stack和heap區別

http://www.ruanyifeng.com/blog/2013/11/stack.html

這裏寫圖片描述
這裏寫圖片描述

C++多態

C++ 多態意味着調用成員函數時,會根據調用函數的對象的類型來執行不同的函數。

struct A{
  void foo(){printf("foo");}
  virtual void bar(){printf("bar");}
  A(){bar();}
};
struct B:A{
  void foo(){printf("b_foo");}
  void bar(){printf("b_bar");}
};
那麼 
A *p=new B;
p->foo();
p->bar();
輸出爲:
bar // 因爲A爲基類,所以要先調用基類的構造函數
foo // 由於foo沒有聲明爲虛函數,所以調用的是基類的方法
b_bar // bar聲明爲虛函數,調用派生類方法

int * const / int const *的不同

首先注意,const int *p 和int const *p 是一樣的。

int const * p = &a;
// pointer to const int
// 表示不能通過指針p修改a的值
int * const p = &a;
// const pointer to int
// 表示指針p不可以再指向別處了
int main()
{
   int i=10;
   int j=1;
   const int *p1;//(1)
   int const *p2=&i; //(2)
   p2=&j;//(3)正確的語句,p2可以改變指向
   int *const p3=&i;//(4)
   *p3=20;//(5)正確的語句,可以通過p3修改i的值
   *p2=30;//(6)錯誤的語句,不可以修改p2的值
   p3=&j;//(7)錯誤的語句,不可以修改p3的指向
return 0;
}

多進程和多線程

這裏寫圖片描述

這裏寫圖片描述

虛函數和純虛函數

虛函數就是使用virtual定義的函數,基類可以在裏面實現。
純虛函數則是使用virtual void function a() = 0聲明,也可看作接口。每個派生類都要有實現純虛函數的具體方法。

sizeof(struct)

http://www.cnblogs.com/lazycoding/archive/2011/03/22/sizeof-struct.html

使用對齊的方式分配內存空間。

struct A{
 long a1; // 佔8個字節
 short a2; // 佔2個字節,但是8是其倍數,所以直接2+8 = 10
 int a3; // 佔4個字節,但是10不是其倍數,加到12後有12+4 = 16
 int *a4;// 佔8個字節,16是其倍數,直接16+8 = 24
};

C++內存釋放

new -> delete
malloc -> free

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章