印象筆記同步分享:《程序員面試寶典》學習記錄6
考點1:面向對象三大特性
1)封裝性:封裝,也就是把客觀事物封裝成抽象的類,并且類可以把自己的數據和方法只讓可信的類或者對象操作,對不可信的進行信息隱藏。(開閉原則)
在C++中類中成員的屬性有:public, protected, private,
這三個屬性的訪問權限依次降低。
2)繼承性:繼承是指這樣一種能力:它可以使用現有類的所有功能,并在無需重新編寫原來的類的情況下對這些功能進行擴展。(里氏代換)interface
3)多態性:多態性(polymorphisn)是允許你將父對象設置成為和一個或更多的他的子對象相等的技術,賦值之后,父對象就可以根據當前賦值給它的子對象的特性以不同的方式運作。簡單的說,就是一句話:允許將子類類型的指針賦值給父類類型的指針。實現多態,有二種方式,覆蓋,重載。
覆蓋,是指子類重新定義父類的虛函數的做法。
重載,是指允許存在多個同名函數,而這些函數的參數表不同(或許參數個數不同,或許參數類型不同,或許兩者都不同)。virtual
考點2:C++中空類默認產生哪些類成員函數?
對于一個空類,編譯器默認產生4個成員函數:
1)默認構造函數
2)析構函數
3)拷貝構造函數
4)賦值函數
考點1:結構是否可以有構造函數、析構函數及成員函數?如果可以,那么結構和類還有什么區別嗎?
區別是class中變量默認是private,struct中的變量默認是public。struct可以有構造函數、析構函數,之間也可以繼承甚至是多重繼承,等等。C++中的struct其實和class意義一樣,唯一不同就是struct里面默認的訪問控制是public,class中默認訪問控制是private。C++中存在struct關鍵字的唯一意義就是為了讓C程序員有個歸屬感,是為了讓C++編譯器兼容以前用C開發的項目。
考點2:準確理解結構struct
struct Test
{
Test(int){}
Test(){}
void fun(){}
};
int main()
{
Test a(1);
a.fun();
Test b(); //這里和上面不一樣這個相當于聲明一個函數,函數名為b,返回值為Test,傳入參數為空,作者的目的應該是聲明一個類型Test,變量為b的變量,所以改為 Test b 下一句才不會錯誤
b.fun();//所以這個會發生錯誤
return 0;
}
構造函數:Test a(1)表示存在默認拷貝構造函數 Test b 表示存在默認無參數的構造函數
考點1:成員變量的初始化
class test
{
private:
int a; 普通成員
const int b; 常量成員
static int c; 靜態成員
static const int d; 靜態常量成員
int &e; 引用類型成員
}
記住下面幾個原則:
1)常量成員(注意沒有靜態常量成員)和引用類型成員只能用成員初始化列表對成員變量初始化
2)靜態成員和靜態常量成員由于是類共有的,不是屬于某一個對象的,因此不能在構造函數中初始化3)靜態成員(注意沒有靜態常量成員)必須在類外初始化
4)引用變量必須初始化才能使用
5)只有靜態常量成員才能在類中直接賦值初始化
6)初始化列表初始化變量順序根據成員變量的聲明順序來執行,而和在程序中賦值先后順序無關
class test
{
int a=1; 錯誤,對象還沒有構造,尚未分配內存空間
int a;
const b;
static int c = 1; 錯誤,不可以再聲明時初始化
static int c;
const static int d = 1; 唯有靜態常量成員才能在類中直接賦值初始化
int &e; 引用類型必須用成員初始化列表
public:
test(int _e):b(1),e(_e) 引用初始化必須為左值
test(int _e):b(1),e(_e){}
};
int test::c=1;
const int test::d=1;
考點2:C++成員變量初始化順序
class A
{
private:
int n1;
int n2;
public:
A():n2(0),n1(n2+2){}
void Print(){
cout << "n1:" << n1 << ", n2: " << n2 <<endl;
}
};
int main()
{
A a;
a.Print();
return 1;
}
輸出結果為:n1:1874928131 n2:0
成員變量在使用初始化列表初始化時,與構造函數中初始化成員列表的順序無關,只與定義成員變量的順序有關。因為成員變量的初始化次序是根據變量在內存中次序有關,而內存中的排列順序早在編譯期就根據變量的定義次序決定了。
修改為:
A()
{
n2 = 0;
n1 = n2 +2;
}
這樣輸出就是n1:2 n2:0
考點3:區分于常量成員和靜態常量成員
下面這個類聲明正確嗎?為什么?
class A
{
const int Size = 0;
};
解析:這道程序題存在著成員變量問題。常量必須在構造函數的初始化列表里初始化或者將其設置成static。
正確的程序如下:
class A
{
A()
{
const int Size = 1;
}
};
或者:
class A
{
static const int Size = 1;
};
考點1:構造函數與析構函數有什么特點?
構造函數與析構函數區別:
1)構造函數和析構函數是在類體中說明的兩種特殊的成員函數。
構造函數的功能是在創建對象時,使用給定的值來將對象初始化。
析構函數的功能是用來釋放一個對象的。在對象刪除前,用它來做一些清理工作,它與構造函數的功能正好相反。
2)構造函數可以有一個參數也可以有多個參數,構造函數可以重載,即定義多個參數個數不同的函數;但是析構函數不指定數據類型,也沒有參數,且一個類中只能定義一個析構函數,不能重載。
3)程序不能直接調用構造函數,在創建對象時系統自動調用構造函數;析構函數可以被調用,也可以由系統調用。析構函數可以內聯
析構函數會被自動調用的兩種情況:①當這個函數結束時,對象的析構函數被自動調用;②當一個對象使用new運算符被動創建時候,在使用delete運算符釋放它,delete將會自動調用析構函數。
考點2:為什么虛擬的析構函數是必要的?
保證了在任何情況下,都不會出現由于析構函數未被調用而導致的內存泄露。
考點3:析構函數可以為 virtual 型,構造函數則不能,為什么?
虛函數采用一種虛調用的辦法。虛調用是一種可以在只有部分信息的情況下工作的機制,特別允許我們調用一個只知道接口而不知道其準確對象類型的函數。但是如果要創建一個對象,你勢必要知道對象的準確類型,因此構造函數不能為 virtual。
考點4:如果虛函數是非常有效的,我們是否可以把每個函數都聲明為虛函數?
不行,這是因為虛函數是有代價的:由于每個虛函數的對象都必須維護一個 v 表,因此在使用虛函數的時候會產生一個系統開銷。如果僅是一個很小的類,且不行派生其他類,那么根本沒必要使用虛函數。
考點5:顯式調用析構函數
#include <iostream>using namespace std;
class MyClass
{
public:
MyClass()
{
cout << "Constructors" << endl;
}
~MyClass()
{
cout << "Destructors" << endl;
}
};
int main()
{
MyClass* pMyClass = new MyClass;
pMyClass->~MyClass();
delete pMyClass;
return 0;
}
運行結果:
結果:
Constructors
Destructors //這個是顯示調用的析構函數
Destructors //這個是delete調用的析構函數
總結:
new的時候,其實做了三件事,一是:調用::operator new分配所需內存。二是:調用構造函數。三是:返回指向新分配并構造的對象的指針。
delete的時候,做了兩件事,一是:調用析構函數,二是:調用::operator delete釋放內存。
考點1:編寫類string的構造函數、析構函數、賦值函數
已知類的原型為:
class String
{
public:
String(const char *str = NULL); 普通構造函數
String(const String &other); 拷貝構造函數
~String(void); 析構函數
String & operate = (const String &other); 賦值函數
private:
char *m_data; 用于保存字符串
};
析構函數:
String::~String(void)
{
delete[] m_data;
}
構造函數:
String::String(const char *str)
{
if(str==NULL)
{
m_data = new char[1];//若能加NULL,判斷更好
*m_data = '
主站蜘蛛池模板:
午夜免费|
国产精品成aⅴ人片在线观看
|
国产一区二区三区播放
|
亚洲日本中文字幕在线
|
精品国产午夜久久久久九九
|
日本一级黄色大片
|
2017自拍偷拍
|
色吊丝中文字幕
|
成年人网站免费视频
|
a毛片免费
|
自拍偷拍欧美亚洲
|
www.精品国产|
久草综合在线
|
91视频影院
|
欧美18videosex性欧美乱任
|
日本噜噜影院
|
欧美午夜精品一区二区三区
|
久久不卡免费视频
|
日本v在线观看
|
国产免费福利片
|
亚洲啪在线
|
永久免费在线观看视频
|
中文字幕乱码中文乱码综合
|
免费一级做a爰片久久毛片潮喷
|
最近中文字幕资源4
|
目韩一区二区三区系列片丶
|
91嫩草私人成人亚洲影院
|
免费jizz在在线播放国产
|
a中文字幕1区
|
啪啪大片
|
亚洲欧美日韩高清在线看
|
亚洲图片一区二区三区
|
另类欧美日韩
|
国产精品成人免费综合
|
色久综合大榴莲
|
免费黄色网址网站
|
欧美一级毛片不卡免费观看
|
欧美亚洲另类在线
|
亚洲一区二区三区久久久久
|
欧洲美女人牲交一级毛片
|
性色va|