国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

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

營銷型外貿(mào)網(wǎng)站制作鄭州網(wǎng)絡(luò)推廣平臺有哪些

營銷型外貿(mào)網(wǎng)站制作,鄭州網(wǎng)絡(luò)推廣平臺有哪些,免費(fèi)ppt模板下載紅色,wordpress postfix【C雜貨店】類和對象(上) 一、面向過程和面向?qū)ο蟪醪秸J(rèn)識二、類的引入三、類的定義四、類的訪問限定符及封裝4.1 訪問限定符4.2 封裝 五、類的作用域六、類的實例化七、類對象模型7.1 類對象的存儲規(guī)則7.2 例題7.3結(jié)構(gòu)體內(nèi)存對齊規(guī)則 八、this指針8.2 t…

【C++雜貨店】類和對象(上)

  • 一、面向過程和面向?qū)ο蟪醪秸J(rèn)識
  • 二、類的引入
  • 三、類的定義
  • 四、類的訪問限定符及封裝
    • 4.1 訪問限定符
    • 4.2 封裝
  • 五、類的作用域
  • 六、類的實例化
  • 七、類對象模型
    • 7.1 類對象的存儲規(guī)則
    • 7.2 例題
    • 7.3結(jié)構(gòu)體內(nèi)存對齊規(guī)則
  • 八、this指針
    • 8.2 this指針的特性
    • 8.3 經(jīng)典面試題
      • 面試題(一)
      • 面試題(二)


在這里插入圖片描述


一、面向過程和面向?qū)ο蟪醪秸J(rèn)識

?C語言是面向過程的,關(guān)注的是過程,分析出求解問題的步驟,通過函數(shù)調(diào)用逐步解決問題。
在這里插入圖片描述


?C++是基于面向?qū)ο?/strong>的,關(guān)注的是對象,將一件事情拆分成不同的對象,靠對象之間的交互完成。
在這里插入圖片描述


二、類的引入

?C語言結(jié)構(gòu)體中只能定義變量,在C++中,結(jié)構(gòu)體升級成類內(nèi)不僅可以定義變量,也可以定義函數(shù)。比如:之前在數(shù)據(jù)結(jié)構(gòu)初階中,用C語言方式實現(xiàn)的棧,結(jié)構(gòu)體中只能定義變量;現(xiàn)在以C++方式實現(xiàn),會發(fā)現(xiàn)struct中也可以定義函數(shù)。

Cpp代碼演示

struct Stack
{//函數(shù)void Init(){a = nullptr;capacity = top = 0;}void Push(int x){a[top] = x;top++;}// ....其他函數(shù)//變量int* a;int top;int capacity;
};

但在CPP中更喜歡用class來代替struct,接下面我們來看看class用法(后面會介紹兩者區(qū)別)。


三、類的定義

class ClassName
{
// 類體:由成員函數(shù)和成員變量組成
};  // 一定要注意后面的分號

class為定義類的關(guān)鍵字ClassName為類的名字,{ }中為類的主體,注意類定義結(jié)束時后面分號不能省略。
類體中內(nèi)容稱為類的成員:類中的變量稱為類的屬性或成員變量; 類中的函數(shù)稱為類的方法或者成員函數(shù)

類的兩種定義方式

  1. 聲明和定義全部放在類體中,需注意:成員函數(shù)如果在類中定義,編譯器可能會將其當(dāng)成內(nèi)聯(lián)函數(shù)處理。
    在這里插入圖片描述
  2. 類聲明放在.h文件中,成員函數(shù)定義放在.cpp文件中,注意:成員函數(shù)名前需要加類名::
    在這里插入圖片描述

四、類的訪問限定符及封裝

4.1 訪問限定符

C++通常是將對象和方法封裝到一起,通過訪問權(quán)限的選擇性將接口提供給外部用戶。 而訪問權(quán)限分為以下3種:在這里插入圖片描述
【訪問限定符說明】

  1. public修飾的成員在類外可以直接被訪問, protected和private修飾的成員則相反。(此處protected和private是類似的)
  2. 訪問權(quán)限作用域從該訪問限定符出現(xiàn)的位置開始直到下一個訪問限定符出現(xiàn)時為止。 如果后面沒有訪問限定符,作用域就到 } 即類結(jié)束。
  3. class的默認(rèn)訪問權(quán)限為private,struct為public。(因為struct要兼容C)

Tips:訪問限定符只在編譯時有用,當(dāng)數(shù)據(jù)映射到內(nèi)存后,沒有任何訪問限定符上的區(qū)別

經(jīng)典面試題】:C++中struct和class的區(qū)別是什么?
答案:C++需要兼容C語言,所以C++中struct可以當(dāng)成結(jié)構(gòu)體使用。另外C++中struct還可以用來定義類。和class定義類是一樣的,區(qū)別是struct定義的類默認(rèn)訪問權(quán)限是public,class定義的類默認(rèn)訪問權(quán)限是private。


4.2 封裝

封裝將數(shù)據(jù)和操作數(shù)據(jù)的方法進(jìn)行有機(jī)結(jié)合,隱藏對象的屬性和實現(xiàn)細(xì)節(jié),僅對外公開接口來和對象進(jìn)行交互。

封裝本質(zhì)上是一種管理,讓用戶更方便使用類。比如:對于電腦這樣一個復(fù)雜的設(shè)備,提供給用戶的就只有開關(guān)機(jī)鍵、通過鍵盤輸入,顯示器,USB插孔等,讓用戶和計算機(jī)進(jìn)行交互,完成日常事務(wù)。但實際上電腦真正工作的卻是CPU、顯卡、內(nèi)存等一些硬件元件。
在這里插入圖片描述
但對于計算機(jī)使用者而言,不用關(guān)心內(nèi)部核心部件,比如主板上線路是如何布局的,CPU內(nèi)部是如何設(shè)計的等,用戶只需要知道,怎么開機(jī)、怎么通過鍵盤和鼠標(biāo)與計算機(jī)進(jìn)行交互即可。因此計算機(jī)廠商在出廠時,在外部套上殼子,將內(nèi)部實現(xiàn)細(xì)節(jié)隱藏起來,僅僅對外提供開關(guān)機(jī)、鼠標(biāo)以及鍵盤插孔等,讓用戶可以與計算機(jī)進(jìn)行交互即可。


五、類的作用域

類定義了一個新的作用域,類的所有成員都在類的作用域中。在類體外定義成員時,需要使用 :: 作用域操作符指明成員屬于哪個類域。(類和其他作用域不同,編譯時它是一個整體,定義變量時可以在任何地方,編譯器會在類的作用域種全局查找)

【代碼演示】

class Date
{
public:void Print();private:int _year;int _month;int _day;
};//類體外定義成員函數(shù)
void Date::Print()
{cout << "_year" << "_month" << "_day" << endl;
}

六、類的實例化

用類的類型創(chuàng)建對象的過程,稱為類的實例化。

類是對對象進(jìn)行描述的,是一個模型一樣的東西,限定了類有哪些成員,定義出一個類并沒有分配實際的內(nèi)存空間來存儲它。但一個類可以實例化出多個對象,實例化出的對象占用實際的物理空間,存儲類成員變量。
?
做個比方。類實例化出對象就像現(xiàn)實中使用建筑設(shè)計圖建造出房子,類就像是設(shè)計圖,只設(shè)計出需要什么東西,但是并沒有實體的建筑存在,同樣類也只是一個設(shè)計,實例化出的對象才能實際存儲數(shù)據(jù),占用物理空間。
在這里插入圖片描述


七、類對象模型

7.1 類對象的存儲規(guī)則

我們先來看看這段代碼,求類和對象的大小。

class A
{
public:
void PrintA()
{cout<<_a<<_i<<_d<<endl;
}private:
char _a;
int _i;
double _d;
};

類中既可以有成員變量,又可以有成員函數(shù)。這里先說下成員變量和結(jié)構(gòu)體的計算規(guī)則是一樣的,但成員函數(shù)呢?

由于每個對象中成員變量是不同的,但是調(diào)用同一份函數(shù),如果按照普通函數(shù)方式存儲,當(dāng)一個類創(chuàng)建多個對象時,每個對象中都會保存一份代碼,相同代碼保存多次,造成空間浪費(fèi)。因此,在C++中,對于類我們只保存成員變量,而成員函數(shù)存放在公共的代碼段
在這里插入圖片描述

7.2 例題

// 類中既有成員變量,又有成員函數(shù)
class A1 {
public:void f1(){}
private:int _a;
};// 類中僅有成員函數(shù)
class A2 {
public:void f2() {}
};// 類中什么都沒有---空類
class A3
{};

求:sizeof(A1) : ______ sizeof(A2) : ______ sizeof(A3) : ______(結(jié)果:4、1、1)

解析: A1的大小為4byte毫無疑問。但A2中僅有一個函數(shù)位于公共代碼區(qū)不算大小,A3更絕空類。對于這種特殊情況,C++定義其大小為1byte(占位,不存儲數(shù)據(jù),僅僅表示對象存在過

總結(jié): 一個類的大小,實際就是該類中”成員變量”之和,當(dāng)然要注意內(nèi)存對齊。注意空類的大小,空類比較特殊,編譯器給了空類一個字節(jié)來唯一標(biāo)識這個類的對象。(表示占位,不存儲數(shù)據(jù),僅僅表示對象存在過

7.3結(jié)構(gòu)體內(nèi)存對齊規(guī)則

  1. 第一個成員在與結(jié)構(gòu)體偏移量為0的地址處。
  2. 其他成員變量要對齊到某個數(shù)字(對齊數(shù))的整數(shù)倍的地址處。
    注意:對齊數(shù) = 編譯器默認(rèn)的一個對齊數(shù) 與 該成員大小的較小值。
    VS中默認(rèn)的對齊數(shù)為8
  3. 結(jié)構(gòu)體總大小為:最大對齊數(shù)(所有變量類型最大者與默認(rèn)對齊參數(shù)取最小)的整數(shù)倍。
  4. 如果嵌套了結(jié)構(gòu)體的情況,嵌套的結(jié)構(gòu)體對齊到自己的最大對齊數(shù)的整數(shù)倍處,結(jié)構(gòu)體的整體大小就是所有最大對齊數(shù)(含嵌套結(jié)構(gòu)體的對齊數(shù))的整數(shù)倍。

【經(jīng)典面試題】

  1. 結(jié)構(gòu)體怎么對齊? 為什么要進(jìn)行內(nèi)存對齊?
  2. 如何讓結(jié)構(gòu)體按照指定的對齊參數(shù)進(jìn)行對齊?能否按照3、4、5即任意字節(jié)對齊?
  3. 什么是大小端?如何測試某臺機(jī)器是大端還是小端,有沒有遇到過要考慮大小端的場景?

八、this指針

我們先來定義一個日期類 Date

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(2022, 1, 11);d2.Init(2022, 1, 12);d1.Print();d2.Print();return 0;
}

對于上述類,有這樣的一個問題:
Date類中有 Init 與 Print 兩個成員函數(shù),函數(shù)體中沒有關(guān)于不同對象的區(qū)分,那當(dāng)d1調(diào)用 Init 函數(shù)時,該函數(shù)是如何知道應(yīng)該設(shè)置d1對象,而不是設(shè)置d2對象呢?

C++中通過引入this指針解決該問題,即:C++編譯器給每個“非靜態(tài)的成員函數(shù)“增加了一個隱藏的指針參數(shù),讓該指針指向當(dāng)前對象(函數(shù)運(yùn)行時調(diào)用該函數(shù)的對象),在函數(shù)體中所有“成員變量”的操作,都是通過該指針去訪問。只不過所有的操作對用戶是透明的,即用戶不需要來傳遞,編譯器自動完成。

8.2 this指針的特性

  1. this指針的類型:類的類型const*,即成員函數(shù)中,不能給this指針賦值。
    2.this指針只能在“成員函數(shù)”的內(nèi)部使用。( this在實參和形參位置不能顯示寫, 但是在類里面可以顯示的用)
  2. this指針本質(zhì)上是“成員函數(shù)”的形參,當(dāng)對象調(diào)用成員函數(shù)時,將對象地址作為實參傳遞給this形參。所以對象中不存儲this指針。
  3. this指針是“成員函數(shù)”第一個隱含的指針形參,一般情況由編譯器通過ecx寄存器自動傳遞,不需要用戶傳遞。

在這里插入圖片描述

8.3 經(jīng)典面試題

面試題(一)

【面試題】:

  1. this指針存在哪里?
  2. this指針可以為空嗎?

答案: this指針存在棧區(qū)。this指針不可以為空。因為this指針是一個隱含的參數(shù),它指向當(dāng)前對象的地址。當(dāng)我們在類的成員函數(shù)內(nèi)部使用this指針時,它指向調(diào)用該函數(shù)的對象。由于每個對象都有自己的地址,因此this指針始終指向一個有效的對象。

面試題(二)

我們在來看看騰訊的這道面試題:

// 1.下面程序編譯運(yùn)行結(jié)果是? A、編譯報錯 B、運(yùn)行崩潰 C、正常運(yùn)行
class A
{void Print(){cout << "Print()" << endl;}
private:int _a;
};
int main()
{A* p = nullptr;p->Print();return 0;
}
//解析:本題主要在于P是否真的進(jìn)行了空指針的解引用。
//     由于p指向的成員變量,但Print函數(shù)實際存在公共代碼區(qū)(和全局變量類似)
//      所以實際上編譯器是不會對p進(jìn)行解引用。而是直接去符號表中查找Print函數(shù)地址。所以答案為C// 2.下面程序編譯運(yùn)行結(jié)果是? A、編譯報錯 B、運(yùn)行崩潰 C、正常運(yùn)行
class A
{ 
public:void PrintA() {cout<<_a<<endl;}
private:int _a;
};
int main()
{A* p = nullptr;p->PrintA();return 0;
}
//解析:這上面一樣,編譯器不會對p進(jìn)行空指針的解引用,而是將p作為this指針傳給PrintA函數(shù)。
//      而PrintA函數(shù)中,需要通過this(即p的形參)解引用指向_a,對空指針進(jìn)行非法行為,運(yùn)行崩潰

好了,本篇博客到此就結(jié)束了,希望能幫助到你。
在這里插入圖片描述
在這里插入圖片描述

http://m.aloenet.com.cn/news/1260.html

相關(guān)文章:

  • 網(wǎng)站pv統(tǒng)計方法電商seo與sem是什么
  • 怎做連接網(wǎng)站百度手機(jī)關(guān)鍵詞排名工具
  • 日本做暖網(wǎng)站泰安百度推廣公司
  • h5網(wǎng)站網(wǎng)站建設(shè)今天發(fā)生的重大新聞
  • 新華區(qū)設(shè)計網(wǎng)站公司短視頻培訓(xùn)要多少學(xué)費(fèi)
  • 廣州快速建站哪家服務(wù)專業(yè)百度搜圖片功能
  • http網(wǎng)站開發(fā)汨羅網(wǎng)站seo
  • 網(wǎng)站制作最便宜比較靠譜的推廣公司
  • 做logo的著名網(wǎng)站東莞網(wǎng)站關(guān)鍵詞優(yōu)化排名
  • 私自建立賭博網(wǎng)站判決書網(wǎng)絡(luò)推廣渠道和方式
  • 天津網(wǎng)站經(jīng)營性備案seo描述快速排名
  • python數(shù)據(jù)分析做網(wǎng)站百度總部投訴電話
  • 網(wǎng)站內(nèi)部鏈接有什么作用有什么平臺可以發(fā)廣告
  • 邢臺建網(wǎng)站找誰指數(shù)型基金
  • 深圳最新疫情防控信息亻seo關(guān)鍵詞優(yōu)化軟件
  • 如何做收機(jī)微網(wǎng)站seo排名優(yōu)化推廣報價
  • 做公司+網(wǎng)站建設(shè)價格低谷歌賬號注冊
  • 網(wǎng)易云外鏈wordpressseo服務(wù)商
  • 新手做市場分析的網(wǎng)站抖音信息流廣告怎么投放
  • 不用淘寶客api如何做網(wǎng)站網(wǎng)站制作 網(wǎng)站建設(shè)
  • 銀川做企業(yè)網(wǎng)站合肥seo報價
  • 重慶網(wǎng)站建設(shè)設(shè)計網(wǎng)絡(luò)營銷十大成功案例
  • 娛樂網(wǎng)站開發(fā)福州外包seo公司
  • 榮耀手機(jī)商城官方網(wǎng)站入口西安seo排名外包
  • 蘇州網(wǎng)站建設(shè)的一般流程職業(yè)技能培訓(xùn)網(wǎng)
  • 哪家做網(wǎng)站靠譜企業(yè)營銷策劃
  • 福清網(wǎng)站建設(shè)百度收錄批量提交入口
  • 海門做網(wǎng)站自動優(yōu)化句子的軟件
  • 數(shù)據(jù)分析師簡歷襄陽網(wǎng)站推廣優(yōu)化技巧
  • 北京住房城鄉(xiāng)建設(shè)部網(wǎng)站八大員千萬不要去電商公司上班