最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

C++類基礎(chǔ)

2023-09-06 20:50 作者:虛云幻仙  | 我要投稿

#include <iostream>

using namespace std;

class Stack //類,面向?qū)ο?,類名為Stack

{

????public: //以下內(nèi)容均為public,可供類外調(diào)用

???? Stack(); //類的構(gòu)造器constructor,在每次聲明類的對(duì)象時(shí)執(zhí)行初始化操作

???? Stack(const int); //構(gòu)造器的格式為 類名(參數(shù)可選) ,構(gòu)造器沒(méi)有返回值不寫void,多個(gè)構(gòu)造器構(gòu)成重載,注意避免重載和默認(rèn)參數(shù)二義性

???? ~Stack(); //析構(gòu)器destructor,在對(duì)象釋放時(shí)執(zhí)行,格式為 ~類名() ,無(wú)參無(wú)返回不寫void

???? //構(gòu)造器和析構(gòu)器在沒(méi)有手動(dòng)定義的情況下會(huì)默認(rèn)生成無(wú)參空函數(shù)

???? bool push(char); //在類中可以寫完整的函數(shù)定義,如果分成頭文件和.cpp兩部分應(yīng)在頭文件中只寫函數(shù)聲明

???? bool isFull() //所有在類聲明中定義的方法都將自動(dòng)內(nèi)聯(lián)

???? {

???? ????return top >= size; //調(diào)用的top、size均為類的成員/字段,在類中可直接調(diào)用

???? }

???? bool isempty()

???? {

???? ????return top <= 0;

???? }

???? char pop(); //類的普通函數(shù)/成員函數(shù)需聲明返回值類型

????private: //以下內(nèi)容均為private私有,在類外無(wú)法直接調(diào)用

???? char* arr; //成員arr,指針用于指向數(shù)組

???? int size=1024; //默認(rèn)數(shù)組的大小,c++11類內(nèi)初始化(之前版本不允許)

???? int top=0; //棧頂,默認(rèn)沒(méi)有項(xiàng)

}; //頭文件截止


//.cpp文件

Stack::Stack() //Stack類的名稱空間,不會(huì)和文件中全局函數(shù)Stack()沖突(如果有的話)

{

????arr = new char[size]; //構(gòu)造器中創(chuàng)建數(shù)組內(nèi)存塊

}

Stack::Stack(const int s) //接收一個(gè)參數(shù),用于指定棧的大小

{

???? size = s>0?s:size; //防御性代碼

???? arr = new char[size]; //類的函數(shù)中可以直接使用類的成員,即使在類聲明外

???? //函數(shù)中沒(méi)有打算改變s的值,所以聲明為const,盡量使用const提高函數(shù)的兼容性/避免用變量接收調(diào)用時(shí)傳入的常量

}

//錯(cuò)誤: Stack::size = 20; 在類外只能訪問(wèn)類的public內(nèi)容,在public的函數(shù)中可以訪問(wèn)private成員(就像上面的構(gòu)造函數(shù)中訪問(wèn)size)

Stack::~Stack()

{

????delete[]arr; //釋放構(gòu)造階段分配的空間

}

bool Stack::push(char ch) //向棧中壓入項(xiàng)

{

???? if (isFull())

???? ???? return false;

???? arr[top++] = ch;

?????return true;

}

char Stack::pop()

{

???? if (isempty())

???? ???? return NULL;

???? return arr[--top];

}

//如果在類外寫作inline char Stack::pop() {}將函數(shù)定義為內(nèi)聯(lián)函數(shù),類聲明中的函數(shù)原型不需要寫inline,所以將函數(shù)定義寫在類聲明中等價(jià)于在類外寫inline定義


int mainclass1()

{

???? Stack sta; //創(chuàng)建對(duì)象,該對(duì)象大小為成員大小的總和(有可能因?yàn)閷?duì)齊要求補(bǔ)一些空位),即char* arr 8/int size 4/int top 4總共16,不包含arr指向的動(dòng)態(tài)內(nèi)存,也不包含函數(shù)

???? cout << sizeof(sta) << endl;

???? sta.push('c');

???? cout<<sta.pop()<<endl;

???? Stack sta2(16); //調(diào)用有參構(gòu)造器

???? char ch = 'a';

???? while (sta2.push(ch++))

???? {

???????? continue;

???? }

???? while (!sta2.isempty())

???? {

???? ???? cout << sta2.pop();

???? }

???? //sta和sta2均為自動(dòng)變量,所在塊結(jié)束時(shí)會(huì)釋放,自動(dòng)調(diào)用~Stack()析構(gòu)器

???? Stack sta4(16), sta5(32), sta6; //前兩個(gè)使用有參構(gòu)造器,最后一個(gè)使用無(wú)參構(gòu)造器

???? Stack* ps = new Stack; //ps是指針,占一個(gè)指針的大小8字節(jié),指向new動(dòng)態(tài)分配的內(nèi)存空間,new Stack調(diào)用無(wú)參構(gòu)造器,將對(duì)象(16字節(jié))的地址傳給ps

???? delete ps; //動(dòng)態(tài)變量ps需要手動(dòng)釋放,調(diào)用delete釋放ps指向的空間時(shí)會(huì)先執(zhí)行對(duì)象的析構(gòu)器

???? Stack* ps2 = new Stack(16); //調(diào)用有參構(gòu)造器

???? delete ps2;

???? Stack sta3 = Stack(16); //等價(jià)于Stack sta3(16); 創(chuàng)建一個(gè)對(duì)象后標(biāo)識(shí)為sta3,實(shí)際經(jīng)過(guò)編譯后標(biāo)識(shí)符sta3不存在,直接使用sta3的地址

???? //如果類中沒(méi)有聲明成員,則類的大小為1(占位用),即便沒(méi)有成員、沒(méi)有手動(dòng)聲明構(gòu)造器,創(chuàng)建對(duì)象時(shí)依然會(huì)執(zhí)行默認(rèn)生成的構(gòu)造器,即創(chuàng)建對(duì)象一定會(huì)進(jìn)行初始化,即便初始化操作沒(méi)有改變?nèi)魏螙|西/沒(méi)有做任何事

???? //Stack c;只要?jiǎng)?chuàng)建對(duì)象,無(wú)論這語(yǔ)句寫在哪里,都會(huì)執(zhí)行初始化

???? return 0;

}

class Stack2

{

???? //不寫訪問(wèn)控制默認(rèn)private

???? int size_; //可以采用p_size或者size_表示數(shù)據(jù)成員

????public:

???? Stack2(int size) //形參正常書寫便于用戶理解

???? {

???? ????size_ = size; //size_對(duì)應(yīng)size便于維護(hù),且用戶無(wú)法看到私有的size_成員,只能看到構(gòu)造器中形參名size

???? }

};

class claSt1

{

???? int i;

???? char c;

???? double d;

};

void mainclaSt1()

{

????cout << sizeof(claSt1); //int占4字節(jié)char占1字節(jié),但double對(duì)齊要求為8所以char之后空出3字節(jié),實(shí)際大小16字節(jié)

}


C++類基礎(chǔ)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
灵台县| 大田县| 大余县| 泉州市| 舞阳县| 郧西县| 延寿县| 通州区| 磐安县| 扎鲁特旗| 无棣县| 泽州县| 枣阳市| 呼伦贝尔市| 嘉义县| 安陆市| 诏安县| 延安市| 静海县| 上犹县| 望江县| 苏尼特左旗| 泰来县| 蚌埠市| 甘南县| 衡东县| 沛县| 农安县| 大庆市| 新源县| 应城市| 托里县| 莱阳市| 于都县| 天气| 锦屏县| 华安县| 顺昌县| 眉山市| 景洪市| 雷波县|