日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++基础(上) 听课流水账

發布時間:2023/12/20 c/c++ 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++基础(上) 听课流水账 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、pass by value /? ?pass? by? pointer? /? ?pass? by? reference

?

pass by value:實參和形參不是同一個值,因此交換的是形參的值,當函數swap結束后,a和b的值并沒有發生交換

pass? by pointer? and? pass by reference :實參和形參是相同的。

?

?

?

?

2、動態內存

?

申請失敗的返回值是 0? 而不是 NULL, null在cpp中廢止了。

?

申請一個長度我10,初始值都為0的空間

int *num= new int[10]();

?

?

?

3、對比new和malloc

?

?

?

?

?

4、cpp內存模型

?

內存模型:棧、堆、靜態區、常量區。

?

?

?

5、數組內存模型

?

?

?

?

5、const char *? ? /? ?char *? const? ? /? ?char const *

?

在c中,const是只讀變量,cpp里const指的是常量

?

?

?

6、常量指針和指針常量

?

下圖為p1常量指針——p1所指地址上的內容不可以通過p1做出改動

?

下圖p2為指針常量——p2所指的地址不可以發生改動

數組名就是一個指針常量

?

實例:

?

下圖中的int const* piconst int* pci是一樣的

? ? ? ?

?

?

?

?

7、UML類圖

?

?

一些編碼規范:類名首字母大寫;

?

?

?

?

8、匿名對象

?

?

?

?

?

9、訪問對象成員

?

返回值類型? 類名?: :? 函數名

?

?

?

?

10、cpp的string類型

?

?

?

?

?

11、訪問器與更改器

?

?

?

?

?

12、同名屏蔽

?

#include "pch.h" #include<iostream> using namespace std;class Foo { public:int x;int y;Foo() {x = 10;y = 10;}void p() {int x = 20;cout << x << endl;cout << y << endl;} };int main(int argc, char **argv) {Foo foo;foo.p();return 0; }

運行結果:? 20? ?10

?

?

?

13、成員函數的this指針

?

?

?

?

14、避免同名屏蔽的簡單方法

?

?

?

?

?

15、對象數組

?

#include "pch.h" #include <iostream> using namespace std;class C { public:C(int i) { //帶參構造函數 std::cout << "\t parameterized ctor" << std::endl;}C() { //無參(默認)構造函數 std::cout << "\t default ctor" << std::endl;}C(const C& c) { //拷貝構造函數 std::cout << "\t copy ctor" << std::endl;}C& operator =(const C& c) { //重載了類C的賦值運算符,觀察main()中的對象賦值現象 std::cout << "\t assignment operator" << std::endl;return *this;} };int main() {cout << "C c1;" << endl;C c1; //調用無參(默認)構造函數cout << "C c2(2);" << endl;C c2(2); //調用有參構造函數cout << "C c3 = c1;" << endl;C c3 = c1; //調用拷貝構造函數cout << "C c4 = C();" << endl;C c4 = C(); //編譯器將之等價為 C c4;cout << "C c5 = C(5);" << endl;C c5 = C(5); //編譯器將之等價為 C c5(5);cout << "C c6(c1);" << endl;C c6(c1); //調用拷貝構造函數 cout << "C c7(C(7));" << endl;C c7(C(7)); //編譯器將之等價為 C c7(7);cout << "C c8[4] = {C(), C(18), c7};" << endl;C c8[4] = { C(), C(18), c7 }; //c8中的4個元素初始化時,是看做4個獨立的對象處理: //C c80 = C(); 調默認構造函數 //C c81 = C(18); 調有參構造函數 //C c82 = c7; 調拷貝構造函數 //C c83 = C(); 調默認構造函數 cout << "C c9; c9 = C(9);" << endl;C c9; //調用默認構造函數 c9 = C(9); //先調用有參構造函數構造一個匿名對象C(9),然后調用賦值運算符將該匿名對象賦值給c9return 0; }

?

?

?

16、封裝

?

當你的數據域是對象類型的時候,他必須放在構造函數的初始化列表里面進行構建,除非這個數據域的對象類型中有默認的無參構造函數。

?

?

?

?

17、不可變對象

?

定義:創建之后,不可變對象不可修改,除非通過成員拷貝

?

如何讓類“不可改變”:

1、數據域均設置為私有屬性。

2、沒有接口,使得外部可以調用來更改你的數據。

3、也沒有能夠返回可變數據域對象的引用或指針的訪問器。

不可變類的一個特征是線程安全的,所以他有用。

?

?

?

18、避免多次聲明

?

?

?

19、static

?

本文件內的static函數只允許本文件訪問

? ?

?

下圖中的靜態數據成員numberofObjects,被類Circle的對象們共享。

?

靜態成員變量只能放在所有函數的外面進行初始化

numberOfObjects一定要初始化,不然會報錯

?

?

?

20、使用靜態成員函數的規則

?

靜態成員函數的訪問規則

?

?

?

?

?

21、析構函數

?

?

?

?

22、拷貝構造

?

拷貝構造函數的形式以及何時會調用拷貝構造函數

注意下圖右下角的賦值? x c?= b; ,構造出的c里面傳入的是默認參數 1 。

?

淺拷貝和深拷貝(類中數據成員如果含有指針,一定要自己寫拷貝構造函數,因為編譯器默認給生成的是淺拷貝版的拷貝構造函數,容易出問題的)

拷貝構造函數是一種特殊的構造函數

?

?

?

?

?

23、寫一個類,實現棧的功能

?

?

?

24、寫一個類,實現vector

?

?

?

?

?

24、一些編碼規范

?

?

?

25、繼承

?

?

派生類不能繼承的是:

1、構造函數(cpp 11 中已經允許)

2、析構函數

3、友元函數

4、拷貝賦值函數

?

派生類構造函數調用基類構造函數的方法 :

?

若沒有顯示的調用基類的構造函數,則編譯器默認調用無參的基類構造函數

(如果你寫的構造函數有參,則編譯器會報錯,因為找不到無參的積累構造函數)

?

?

構造和析構的順序

?

?

?

?

?

26、重定義

?

派生類父類的同名函數內容進行修改。不修改的地方:

1、返回值類型

2、傳入的參數

3、函數名

?

?

區分重定義和重載

?

?

?

?

27、綁定

?

?

基類中定義的虛函數,在派生類中的同名函數會自動變成虛函數,無需添加virtual關鍵字。

?

?

總結靜態綁定和動態綁定

?

?

下面四張圖的總結:

訪問方式訪問對象
對象調用(p.f())子類同名函數
父類指針指向子類對象(圖2)父類同名函數
父類指針指向子類對象(圖3)子類的同名虛函數

? ? ??

?

?

?

?

?

?

28、protected

?

protected成員可以被類內成員函數直接獲取不可以通過對象來獲取

?

?

?

?

?

29、幾種繼承方式的總結

?

?

?

?

?

?

30、抽象類與純虛函數

抽象類(有純虛函數的類是抽象類)不能被實例化

?

?

?

31、動態轉換

?

?

?

?

?

32、向上轉型和向下轉型

?

?

向上轉型可不使用dynamic_cast,而是隱式轉換

向下轉型必須使用dynamic_cast進行顯示轉換。

?

?

?

?

33、typeid運算符——用于獲取對象所屬的類的信息

?

?

可將派生類對象截取,只是用繼承來的信息;但是不能將基類對象加長,無中生有變出派生類對象。(如下圖:circle是派生類)

總結

以上是生活随笔為你收集整理的c++基础(上) 听课流水账的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。