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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

【C++】01

發布時間:2023/12/14 c/c++ 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++】01 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

c語言是結構化語言,c++兼容c,但是c不兼容c++。

c語言注重實現邏輯,c++注重過程,整體設計。

c語言對于大項目不易于維護、擴展。

c++考慮整體優化和管理。

c++頭文件一般沒有擴展名,.h一般是c語言的,c開頭的是c++的。

c++標準函數庫和類庫的合體。

std是命名空間,所有組件的名字都存在std中,打開命名空間才可以使用形如cout等命令。

可以用std::cout<<這種方式,但是打開了namespace也就沒必要了。

c++組成:c語言+面向對象+泛型編程+STL標準模板庫。

面向對象三大特性:封裝、繼承、多態。

  • 封裝:零散的數據和算法,放入一個集合,方便管理使用。
  • 復用:功能體現在方法中,針對功能去設計。
  • 擴展:新的功能不能影響原來的功能。

可以用模板類實現復用。

template<typename T> T add(T a,T b){return a+b; }

可以對同一類型進行模板代用。

?解決方案中可以直接添加項目sln。但是只能同時調用一個,選為主要的。

debug調試信息都在,release沒有調試信息,更小一點。

因此除了調試信息的內容,剩下都必須留下。工程文件和cpp等都留下。


作用域

::表示作用域運算符。

<<輸出操作符,>>輸入操作符,endl有刷新緩存的用法,都是函數。

cout是一個ostream類的對象。

變量在程序中所起的作用范圍:全局、語句、局部,語句指的是臨時變量,一般沒用。

作用域優先級:范圍越小越優先。

作用域運算符作用:區分同名成員,例如cout<<::n,就是全局區的n變量,而不是局部的。

重定義:同一作用域不可能有兩個變量名重復。

可以劃分作用域,即可使用重名。

命名空間:組織和重用代碼編譯單元,解決重名現象。

using+空間名字,或空間名+作用域運算符。

命名空間目的:整體操作方便,實現:復用+擴展。

namespace AA{int a=10}也可以對空間內容直接顯示,using AA:a。

#ifdef#endif

#ifdef AA using namespace aa; #endif#ifdef BB using namespace bb; #endif#define AAcout<<a<<endl;

此時的a就是aa空間里的a了。?


new/delete

new數組,int* arr=new int[10];delete[] arr;

new int[10](),就都是初始化空值。其中()不是初始化列表,{}才是。

注意數組的類型是int[10],并且delete時候也要表示出這個變量是數組。

arr=0,表示數組是空。因此可以用if(!arr)來作為條件判斷。

指針delete之后,一定要繼續p=0;依次來將指針所指賦空。理由是:避免內存泄漏。

new int(123),初始化地址中內容,是123。

指針數組,他是數組,但是里面都是指針,也就是說內容是,int*[],但是如果new的話,他要用的是首元素來接住,那么首元素就是int*,然后指針還要加一個*,就是int** p=new int*[];

數組指針,是一個數組的指針,new (int(*)[]),然后接的時候,應該就是整個數組,int(**p)[]。

二維數組元素都是一維數組,int(*p)[]=new int[][];

new申請類對象,會調用構造函數,而malloc不會。


重載

for基于數組有特殊用法,for(auto& x:arr),即可在不使用下標的情況下,直接遍歷數組,而其中的x表示每一個元素,依次進行賦值。

這里利用了引用,表示可以直接取值,在函數中用的頗為廣泛,也就是說,可以全部加上。

缺省函數參數,可以在函數中使用默認值,這樣,在調用的時候可以不用加入參數。

參數不可以傳一半,形參只能是從后往前進行傳默認值,而且函數調用時,不能是空參數。

同名函數不可以同時出現,但是,如果是參數不同的話,那可以。

這種同名函數之間的關系叫做:重載。

重載:當同一類功能的函數,只是部分細節不同,說的是參數類型和個數,利用“重載機制”可以將這些函數去程相同的名字,從而使程序易于閱讀和理解。


引用

引用:變量的別名。

類似于指針,兩個名字指向一個空間。引用定下來之后,就永遠是這里了。

引用好處:避免將整塊數據全部壓棧。提高程序效率。不會新申請空間。

返回值是引用的好處:不會產生返回值的副本。

方法:必須在定義的時候初始化,int& b=a;而且后面不能是常值,必須是變量。

常引用:const int& b=123;

與引用不同,后面就是常值。

void (p_fun)(int)=&show;


STL-string

bool值只占1字節,小寫true和false。

string是類,里面有很多的使用方法,如鏈接所示:【C++】STL-string

鏈接:【C++】STL-string_王向晚的博客-CSDN博客

字符串名字代表地址。


類與對象

面向過程:DS+算法。

面向對象:對象求和。而對象=數據+算法。

類:復雜數據類型。將不同類型的數據和相關操作封裝在一起的操作。

class的結尾有分號!

private一般是用于接口類中,不可訪問的成員。如果繼承可以用protected。

如果擁有接口,甚至可以修改private的內容。

類中的變量,不可以直接初始化。

類不占用空間,而對象占用。

類中不能裝自己類的對象。

顯示和賦值要分開。

接口:提高安全性,封裝復用。


構造、析構函數

與類同名,無返回值。

目的:給類成員初始化。定義對象的時候自動調用。

如果不寫構造或析構,系統會給一個。

但是構造可以有多個(是否有參),但是析構只能有一個。

析構:反向構造,釋放空間。由析構來完成內存回收。

作用域結束,調用析構,或者是對象生命周期結束。

類是數據與算法的集合。

析構函數出現在return 0之后。

雖說有析構函數,但是回收的也是類內的空間,但是如果你是new的對象,你要手動析構你自己創建的這個對象。

全局對象:整個應用程序,可以跨文件。跨文件用extern進行僅聲明。

靜態:程序創建開始,到程序結束。但是靜態,僅限在自己文件中使用。

但是如果是同文件之內,第一次創建之后,后面就不會創建了。


封裝

優點:可讀性強,便于修改維護,構造析構。

接口:當換了操作系統或者編譯環境時,無需修改。

設計原則——單一職責:職責越少,復用性越高。

因此要拆分函數,與此類無關的函數不能放入。


對象種類

全局對象生命周期:程序退出。

正常對象:return 0——析構——結束。

全局對象:return 0——結束}——析構。

new和delete觸發構造和析構。

堆區空間要手動釋放,以免內存泄漏。


this指針

空類占1B,起到占位作用。

空類+函數,也是1B。

但是有成員,例如一個int,就是4B了,而不是4+1B。

成員屬性:定義對象時分配空間,每一個對象都有一分。

成員函數:編譯期存在,在代碼區,所有對象共用一份函數。

因此理解為,即使我們沒定義對象,但是可以調用沒有成員屬性的成員函數。

如果定義的是空對象,那么也不可以對對象成員屬性進行賦值。

因為得0就是沒空間,1B的占用,但是如果是new的,那么是一個沒賦初值的空間。

在類成員函數中,如果有與成員屬性同名的變量存在,那么將如何區分呢?

就是this指針,例如都是a,但是在類中可以用this->a來表示,這是成員屬性。

this的類型是類的指針。

注意的是:this指的是:對象的地址&obj,也就是說,如果你是空類或者沒new,那么this是不存在的。

這也就理解了,靜態成員函數,是沒有this指針的。

因此靜態成員函數,即使沒定義對象也是可以使用的。

非靜態成員函數,必須通過對象調用。

空對象,只能調用沒有成員屬性的。

this只存在于函數的參數里,是用來調用對象地址的。使用this完成的封裝。


const

const變量:1、定義就要初始化,2、不可以修改。

const*隨便指,不能改內容。*const里面隨便換,不能改指。

類中的const成員屬性,必須通過初始化列表初始化。構造函數的初始化列表在類名()之后,用冒號開始,逗號分隔。

邏輯順序:創建對象——構造函數——初始化列表——構造中的內容。

類常成員函數,const寫在函數名()之后,void show() const。

常函數:可以用普通變量,但是不能修改普通變量,常變量本身就不能修改,無論在哪。

常對象:只能用常函數,不能用普通函數。

常對象可以調用任何屬性。

理解為:this指針從*變成了const*類型了,因此就不能修改內容了。降低安全性。


初始化列表

按照變量定義的順序執行,也就是行數先后,與自己寫的順序無關。

int b; int a; lei(int x):a(b),b(x){}

如上代碼所示,即使是列表中a寫在前面,但是定義時,b先定義的,那么就先執行b(x),然后執行a,這樣就不會有亂碼。

類中不能定義自己類的對象,但是可以定義自己類的指針,也需要在列表中初始化。


static

靜態編譯期就存在,每次調用,都是這一個東西。

也就是說,靜態成員屬性和函數,都可以不用對象就能調用。

靜態成員屬性要在類外進行初始化,static int a; int lei::a=10;

初始化也要加上成員的類型,也就是先int才行。

靜態成員和函數也都不占用內存,要不無法解釋無需對象調用這件事。

靜態成員函數:制衡使用靜態成員。

理由就是沒有this指針。因為無需對象調用。

const:能不能改,static:能不能用。


類之間的關系

組合(復合)、依賴、關聯、聚合。

part of、use、have、combine。

當對象作為參數,盡量使用引用,如果怕被修改,再加入const。

總結

以上是生活随笔為你收集整理的【C++】01的全部內容,希望文章能夠幫你解決所遇到的問題。

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