中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

手機(jī)兼職的正規(guī)平臺(tái)有哪些如何優(yōu)化網(wǎng)站排名

手機(jī)兼職的正規(guī)平臺(tái)有哪些,如何優(yōu)化網(wǎng)站排名,做近代史綱要題的網(wǎng)站,武夷山網(wǎng)站建設(shè)目錄 前言: 類和對象的理解 類的引入 類的定義與使用方式 訪問限定符 類的兩種定義方式 成員變量的命名規(guī)則 類的作用域 類的實(shí)例化 類對象模型 計(jì)算類對象的大小 類對象的存儲(chǔ)方式 this指針 前言: C語言是面向過程的,關(guān)注的是過…

目錄

前言:

類和對象的理解

類的引入

類的定義與使用方式

訪問限定符

類的兩種定義方式

成員變量的命名規(guī)則

類的作用域

類的實(shí)例化

類對象模型

計(jì)算類對象的大小

類對象的存儲(chǔ)方式

this指針


前言:

  • C語言是面向過程的,關(guān)注的是過程,分析出求解問題的步驟,通過函數(shù)調(diào)用逐步解決問題;
  • C++是基于面向?qū)ο?/strong>的,關(guān)注的是對象,將一件事情拆分成不同的對象,靠對象之間的交互完成;

類和對象的理解

是一個(gè)抽象的概念,描述了一類對象的共同屬性行為

對象是類的具體化,它是類的實(shí)例,具有類中定義的屬性和行為;

在C++中,通常由數(shù)據(jù)成員成員函數(shù)組成,數(shù)據(jù)成員是類的屬性,它們描述了對象的狀態(tài),成員函數(shù)是類的行為,它們描述了對象可以執(zhí)行的操作,對象的創(chuàng)建是通過類的實(shí)例化來完成的,當(dāng)程序需要使用類時(shí),可以通過創(chuàng)建類的對象來使用類的屬性和行為;

舉例如下:

將“汽車”看作一個(gè)類,在這個(gè)類中定義了汽車的屬性和行為,比如顏色、品牌、速度等屬性,以及加速、剎車、轉(zhuǎn)彎等行為;當(dāng)我們要描述具體一輛汽車時(shí),就需要?jiǎng)?chuàng)建一個(gè)該類的對象,并根據(jù)需要設(shè)置其相應(yīng)的屬性值或?qū)ζ溥M(jìn)行行為操作;

類的引入

由于C++兼容C語言中struct的所有用法,同時(shí)C++對關(guān)鍵字struct進(jìn)行了升級,將struct升級為類;

  • ?struct? ? 類名 (類名即為變量類型)
//c語言
struct Stack
{int* a;int top;int capacity;
};
int main()
{//Stack s1; //C語言 ---> 未定義的標(biāo)識符struct Stack s1;//只能采取帶上struct關(guān)鍵字定義變量return 0;
}
//c++ 
struct Stack
{int* a;int top;int capacity;
};
int main()
{Stack s1;//可直接采取這種方案定義變量,不需要加上struct的關(guān)鍵字return 0;
}
//c語言定義鏈表結(jié)點(diǎn)
struct ListNode
{//ListNode* next;//C語言 ---> 未定義的標(biāo)識符struct ListNode* next;int val;
};
//c++定義鏈表結(jié)點(diǎn)
struct ListNode
{ListNode* next;//編譯通過int val;
};
  • C++結(jié)構(gòu)體中可以定義函數(shù);
//c++ 類里面可以定義函數(shù)
struct Stack
{int* a;int top;int capacity;//初始化棧void Init(){a = 0;top = 0;capacity = 0;}
};

?C++用關(guān)鍵字 class 代替 struct;

類的定義與使用方式

class 類名
{//類體: 由成員變量與成員函數(shù)組成}; //此處分號不可省略

類的成員:類中的變量稱為類的屬性或成員變量類中的函數(shù)稱為類的方法或成員函數(shù)

訪問限定符

C++實(shí)現(xiàn)封裝的方式:用類將對象的屬性與方法結(jié)合在一塊,讓對象更加完善,通過訪問權(quán)限選擇性的將其接口提供給外部的用戶使用;

?訪問限定符說明:

  1. public修飾的成員類外可以直接被訪問
  2. protected和private修飾的成員類外不能直接被訪問(此處protected和private是類似的)
  3. 訪問權(quán)限作用域從該訪問限定符出現(xiàn)的位置開始直到下一個(gè)訪問限定符出現(xiàn)時(shí)為止;
  4. 如果后面沒有訪問限定符,作用域就到 } 即類結(jié)束;
  5. class的默認(rèn)訪問權(quán)限為privatestruct默認(rèn)訪問權(quán)限為public(因?yàn)閟truct要兼容C)
class Stack
{
private:int* a;int top;//a,top,capacity--->成員變量私有int capacity;//private的作用域從private開始到public,若沒有public,直接到類結(jié)束;//由于class的默認(rèn)訪問權(quán)限為私有,省略掉private,三個(gè)成員變量依舊私有
public://初始化棧void Init()// Init()函數(shù)公有{a = 0;  top = 0;capacity = 0;}
}; //類結(jié)束

類定義的慣例:成員變量私有,成員函數(shù)公有;

class Stack
{
public:int* a;int top;int capacity;//初始化棧void Init(){a = 0;  top = -1;capacity = 0;}//空棧的判斷bool StackEmpty(){return (top == -1);}
}; 
int main()
{Stack s1;s1.Init();//判斷方式1:空棧, 若top=0,表示指向棧頂元素的下一個(gè)位置;//         空棧, 若top=-1,表示指向棧頂元素的位置;//棧的定義方式不同,如下判斷方法可能導(dǎo)致出錯(cuò);if (s1.top==0)//判斷方式2:采取訪問成員函數(shù)進(jìn)行判斷,直接調(diào)用判空函數(shù),不會(huì)出錯(cuò)if (!s1.StackEmpty()){}//如上就是成員變量私有,成員函數(shù)公有的原因return 0;
}

類的兩種定義方式

定義方式1:類的聲明放在.h文件中,成員函數(shù)定義放在.cpp文件中;

??????????????????? (注:成員函數(shù)名前加 類名 ::)

定義方式2:聲明和定義全部放在類體中;

????????????????? (注:成員函數(shù)如果在類中定義編譯器可能會(huì)將成員函數(shù)當(dāng)成內(nèi)聯(lián)函數(shù)處理)

成員變量的命名規(guī)則

class Date
{
public:void Init(int year,int month,int day){// 這里的year到底是成員變量,還是函數(shù)形參?year = year;//局部優(yōu)先,year為函數(shù)形參//局部優(yōu)先是指在函數(shù)內(nèi)部創(chuàng)建了一個(gè)和全局變量同名的局部變量時(shí);//函數(shù)內(nèi)部對該變量的操作會(huì)優(yōu)先作用于局部變量,而不會(huì)改變?nèi)肿兞康闹祡
private:int year;int month;int day;
};

為了避免如上情形,C++采用成員變量前加 _

class Date
{
public:void Init(int year,int month,int day){_year = year;}
private:int _year;int _month;int _day;//year month day成員變量前加 _
};

類的作用域

定義了一個(gè) 新的作用域類的所有成員都在類的作用域中
類體外定義成員時(shí),需要使用 ::作用域限定符指明成員屬于哪個(gè) 類域
c++中由{ }所定義的皆為作用域;
class Stack
{//變量的聲明,沒有在內(nèi)存中開辟空間int* a;int top;int capacity;
public:void Init();bool StackEmpty();
};
//需要指定Init()函數(shù)屬于Stack類域
void Stack::Init()
{a = 0;top = 0;capacity = 0;
}

類的實(shí)例化

用類的類型創(chuàng)建對象的過程,稱為類的實(shí)例化;
  1. 類是對對象進(jìn)行描述的是一個(gè)模型一樣的東西,限定了類有哪些成員,定義出一個(gè)類并沒有分配實(shí)際的內(nèi)存空間來存儲(chǔ)它;
  2. 一個(gè)類可以實(shí)例化出多個(gè)對象,實(shí)例化出的對象占用實(shí)際的物理空間,存儲(chǔ)類成員變量
class Date
{
public:void Init(int year,int month,int day){_year = year;}int _year;int _month;int _day;
};
int main()
{Date::_year = 2023;//編譯錯(cuò)誤,成員變量為聲明,沒有開辟內(nèi)存空間存儲(chǔ);// Date d; d.year=2023  //正確做法return 0;
}
//Date類是沒有空間的,只有Date類實(shí)例化出的對象才有具體的年份

3. 類實(shí)例化出對象就像現(xiàn)實(shí)中使用建筑設(shè)計(jì)圖建造出房子,類就像是設(shè)計(jì)圖只設(shè)計(jì)出需要什么東西,但是并沒有實(shí)體的建筑存在,同樣類也只是一個(gè)設(shè)計(jì),實(shí)例化出的對象才能實(shí)際存儲(chǔ)數(shù)據(jù),占用物理空間

類對象模型

類對象模型:類對象模型是指將類的成員函數(shù)和成員變量存儲(chǔ)在一起的方式,這種方式將類的成員函數(shù)和成員變量封裝在一個(gè)對象中,通過該對象來訪問類的成員;

計(jì)算類對象的大小

# include <iostream>
using namespace std;
class Date
{
public:void Init(int year,int month,int day){_year = year;}int _year;int _month;int _day;
};
int main()
{Date d;cout << sizeof(d) << endl;return 0;
}
問題:類中既可以有成員變量,又可以有成員函數(shù),那么一個(gè)類的對象中包含了什么?如何計(jì)算一個(gè)類的大小?

類對象的存儲(chǔ)方式

類對象的存儲(chǔ)方式:

對象中只保存成員變量,成員函數(shù)存放在公共代碼段,這種方式將類的成員變量存儲(chǔ)在對象中,而將成員函數(shù)存放在公共代碼段中,通過對象來訪問類的成員函數(shù);

結(jié)論:一個(gè)類的對象大小,實(shí)際就是該類中”成員變量”之和,注意考慮內(nèi)存對齊 ;

空類的大小:空類的大小為1字節(jié);即使一個(gè)類沒有任何成員變量和成員函數(shù),它也會(huì)占用1字節(jié)的內(nèi)存空間;

空的結(jié)構(gòu)體大小:空的結(jié)構(gòu)體大小為0字節(jié),與空類不同,空的結(jié)構(gòu)體不占用任何內(nèi)存空間;

//類中僅有成員函數(shù)--->1byte
//對象中無成員函數(shù)
class B
{
public:void f2() {}
};
int main()
{B b;cout << sizeof(b) << endl;return 0;
}
//空類的大小 ---> 1byte
//無成員變量的類開辟1個(gè)字節(jié),該字節(jié)不存儲(chǔ)有效數(shù)據(jù)
//標(biāo)識定義的對象存在過
class C
{};
int main()
{C c;cout << sizeof(c) << endl;return 0;
}

this指針

class Date
{
public:void Init(int year, int month, int day){_year = year;_month = month;_day = day;}void Print(){cout << _year << "-" << _month << "-" << _day << endl;}
private:int _year;//年int _month;//月int _day;//日
};
int main()
{Date d1, d2;d1.Init(2023, 12, 17);d2.Init(2023, 12, 16);d1.Print();d2.Print();return 0;
}

運(yùn)行結(jié)果:

Date類中有 Init 與 Print 兩個(gè)成員函數(shù),函數(shù)體中沒有關(guān)于不同對象的區(qū)分,d1調(diào)用的Print()函數(shù)與d2調(diào)用的Print()函數(shù)相同,那當(dāng)d1調(diào)用Print()函數(shù)時(shí),該函數(shù)是如何知道應(yīng)該顯示d1對象,而不是顯示d2對象呢?
C++ 中通過引入 this指針 解決該問題,即: C++編譯器給每個(gè)“非靜態(tài)的成員函數(shù)“增加了一個(gè)隱藏的指針參數(shù),讓該指針指向當(dāng)前對象(函數(shù)運(yùn)行時(shí)調(diào)用該函數(shù)的對象),在函數(shù)體中所有“成員變量” 的操作,都是通過該指針去訪問;只不過所有的操作對用戶是透明的,即用戶不需要來傳遞,編譯器自動(dòng)完成

this指針的特性:

  1. this指針的類型類型* const 由于const修飾this,this指針不允許被修改;
  2. 只能在“成員函數(shù)”的內(nèi)部使用 (不能顯示的寫實(shí)參和形參,但是可以在類中顯示的使用);
  3. this指針本質(zhì)上是“成員函數(shù)”的形參,當(dāng)對象調(diào)用成員函數(shù)時(shí),將對象地址作為實(shí)參傳遞給this形參,所以對象中不存儲(chǔ)this指針
  4. ?this指針是“成員函數(shù)”第一個(gè)隱含的指針形參,一般情況由編譯器通過ecx寄存器自動(dòng)傳遞,不需要用戶傳遞

http://www.risenshineclean.com/news/23103.html

相關(guān)文章:

  • 俄語網(wǎng)站建設(shè)學(xué)電商哪個(gè)培訓(xùn)學(xué)校好
  • 如何創(chuàng)立個(gè)人網(wǎng)站網(wǎng)站收錄怎么弄
  • 企業(yè)網(wǎng)站 wordpress網(wǎng)頁代碼模板
  • ps模板下載網(wǎng)站新網(wǎng)站秒收錄技術(shù)
  • 網(wǎng)站建設(shè)的主要職責(zé)免費(fèi)網(wǎng)站免費(fèi)
  • 建網(wǎng)站wordpress女生學(xué)網(wǎng)絡(luò)營銷這個(gè)專業(yè)好嗎
  • 國家攝影網(wǎng)站百度發(fā)布信息怎么弄
  • 讓別人做網(wǎng)站需要提供什么長沙網(wǎng)絡(luò)公關(guān)公司
  • 營銷型網(wǎng)站有哪些特點(diǎn)外貿(mào)網(wǎng)站建設(shè) google
  • 網(wǎng)站做數(shù)據(jù)監(jiān)測寧波網(wǎng)站推廣排名
  • 校園網(wǎng)站設(shè)計(jì)外貿(mào)接單十大網(wǎng)站
  • 嗶哩網(wǎng)站開發(fā)需求分析模板網(wǎng)上推廣
  • 創(chuàng)業(yè)做招聘網(wǎng)站靠譜嗎seo研究協(xié)會(huì)網(wǎng)app
  • 網(wǎng)上招聘網(wǎng)站開發(fā)報(bào)告中國企業(yè)網(wǎng)
  • 幫忙做公司網(wǎng)站seo專員簡歷
  • 仿新浪微博網(wǎng)站代碼推廣資源網(wǎng)
  • 怎么做祝福網(wǎng)站新手怎么做網(wǎng)絡(luò)推廣
  • PHP做網(wǎng)站案例教程軟文代寫文案
  • 賀州網(wǎng)站建設(shè)品牌推廣活動(dòng)方案
  • 做外國網(wǎng)用哪些網(wǎng)站小廣告網(wǎng)頁
  • dede 企業(yè)網(wǎng)站模板下載如何優(yōu)化
  • 如何ps做網(wǎng)站首頁寧波seo優(yōu)化項(xiàng)目
  • ios網(wǎng)站開發(fā)工具有哪些怎么做網(wǎng)址
  • 做網(wǎng)站有哪些注意事項(xiàng)百度關(guān)鍵詞在線優(yōu)化
  • dw做網(wǎng)站怎么用到j(luò)ava友情鏈接網(wǎng)站
  • 鄭州餐飲 網(wǎng)站建設(shè)小視頻關(guān)鍵詞匯總
  • 東莞桂城網(wǎng)站建設(shè)外貿(mào)網(wǎng)站推廣服務(wù)
  • 網(wǎng)站建設(shè)成都時(shí)事新聞熱點(diǎn)
  • 開發(fā)網(wǎng)站公司收入瀏覽器廣告投放
  • 微商城小程序哪個(gè)好青島建站seo公司