-
? ? ? ? ? ? ? ? ? ?對象結(jié)構(gòu)
內(nèi)存中按照用途分為的五個區(qū):
查看全部 -
類內(nèi)定義與內(nèi)聯(lián)函數(shù)的關(guān)系
類內(nèi)定義的成員函數(shù),編譯器優(yōu)先將其以內(nèi)聯(lián)函數(shù)的方式編譯。但不會顯示 inline。類外定義
定義:成員函數(shù)定義在類的外部。
分為兩種:同文件類外定義和分文件類外定義。
同文件類外定義:
????????????類名+“::”+函數(shù)名的形式,定義。
分文件類外定義:
在頭文件(.h)在生命,在cpp文件中定義。
查看全部 -
? ? 類內(nèi)定義和內(nèi)聯(lián)函數(shù)
1.內(nèi)聯(lián)函數(shù)關(guān)鍵字 inline,其與普通函數(shù)的區(qū)別如下:
查看全部 -
#include <iostream>
#include <string>
using namespace std;
/**
? * 定義類:Student
? * 數(shù)據(jù)成員:m_strName
? * 數(shù)據(jù)成員的封裝函數(shù):setName()、getName()
? */
class Student
{
public:
? ? // 定義數(shù)據(jù)成員封裝函數(shù)setName()
? ? void setName(string _name)
? ? {
? ? ? ? m_strName=_name;
? ? }
? ??
? ? // 定義數(shù)據(jù)成員封裝函數(shù)getName()
? ? string getName()
? ? {
? ? ? ? return m_strName;
? ? }
? ??
? ??
//定義Student類私有數(shù)據(jù)成員m_strName
private:
? ? string m_strName;
};
int main()
{
? ? // 使用new關(guān)鍵字,實(shí)例化對象
Student *str = new Student();? //從堆中實(shí)例化對象,new 后跟的為 類名稱
? ? // 設(shè)置對象的數(shù)據(jù)成員
str->setName("慕課網(wǎng)");
? ? // 使用cout打印對象str的數(shù)據(jù)成員
? ? cout<<str->getName()<<endl;
? ? // 將對象str的內(nèi)存釋放,并將其置空
delete str;
str=NULL;
return 0;
}
查看全部 -
#include<iostream> #include<stdlib.h> #include<string> using?namespace?std; class?Student { public: ????void?setName(string?_name) ????{ ????m_strName?=?_name; ????} ????string?getName() ????{ ????return?m_strName; ????} ????void?setGender(string?_gender) ????{ ????m_strGender?=?_gender; ????} ????string?getGender() ????{ ????return?m_strGender; ????} ????int?getScore()????//score為只讀屬性 ????{ ????return?m_iScore; ????} ????void?initScore()//?初始化 ????{ ????m_iScore=0; ????} ????void?study(int?_score) ????{ ????m_iScore?+=?_score; ????} private: ????string?m_strName; ????string?m_strGender; ????int?m_iScore; }; int?main(void) { ????Student?stu; ????stu.initScore();??//初始化0,使得分值可控 ????stu.setName("wenqi"); ????stu.setGender("男"); ????stu.study(10); ????stu.study(8); ????cout?<<?stu.getName()?<<?"?"?<<?stu.getGender()?<<?"?"?<<?stu.getScore()?<<?endl; ????//細(xì)節(jié):引用數(shù)據(jù)對象的函數(shù)記得加括號 ????system("pause"); ????return?0; }
查看全部 -
命名規(guī)則開始規(guī)范:
(1)形參采用 _ 加 名字的形式;
(2)定義數(shù)據(jù)成員命名規(guī)則:m_數(shù)據(jù)類型+名字?
? ? ? ????eg1:? string m_strName;
????????? eg2:int m_iAge一般變量既寫其set函數(shù),又寫其get函數(shù)。設(shè)置只讀時,只寫其get函數(shù)。
查看全部 -
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?數(shù)據(jù)的封裝
1.面向?qū)ο蟮幕舅枷耄赫l做什么。
? ?對象的所有行為均通過調(diào)用自己的函數(shù)完成。2.數(shù)據(jù)封裝的優(yōu)點(diǎn)
? 通過數(shù)據(jù)封裝,確定某些參數(shù)的只讀屬性。查看全部 -
字符串類型 string。
(1)初始化對象的方式:
(2)string的常用操作:
(3)幾個例子表示初始化:注意事項(xiàng):
(1)使用string之前加頭文件:#include<string>
? (2)? 使用string 可簡化重復(fù)繁瑣的字符串操作。
(3)判斷輸入是否為空可用? getline()函數(shù);
? ? ? ? string name;
? ? ? ? getline(cin,name);? ? //cin表輸入流,name為定義的字符串
????????if(name.empty())
????????// 輸入的name為空
查看全部 -
對象實(shí)例化
(1)從棧實(shí)例化
(2)從堆實(shí)例化補(bǔ)充知識:棧和堆的區(qū)別。
所以堆與棧的區(qū)別很明顯:?
?1.棧內(nèi)存存儲的是局部變量而堆內(nèi)存存儲的是實(shí)體;
2.棧內(nèi)存的更新速度要快于堆內(nèi)存,因?yàn)榫植孔兞康纳芷诤芏蹋?3.棧內(nèi)存存放的變量生命周期一旦結(jié)束就會被釋放,而堆內(nèi)存存放的實(shí)體會被垃圾回收機(jī)制不定時的回收。對象成員的訪問
從棧中實(shí)例化使用符號為“.”;
從棧中實(shí)例化使用符號為“->”;注意細(xì)節(jié):
從堆中,最后要判斷是否為空指針,釋放內(nèi)存等;
定義類時記得加訪問限定符;
實(shí)例化對象:類的名稱加變量名方式定義對象。
語句符合標(biāo)準(zhǔn)(定義類時最后的 ; )。
查看全部 -
通過例子引出 類和對象的定義。
對象是具體的事物,類是從對象中抽取出來的。
??
? ? ?關(guān)鍵字-屬性-方法
2.訪問限定符:
? ? ? ? ? ? ? ? ? public:公共的;protected:受保護(hù)的;? private:私有的。
查看全部 -
類{命名空間;成員函數(shù);數(shù)據(jù)成員;}
數(shù)據(jù)成員{普通數(shù)據(jù)成員;string;const成員;靜態(tài)數(shù)據(jù)成員;對象成員;}
成員函數(shù){屬性封裝函數(shù);一般功能函數(shù);特殊函數(shù){構(gòu)造函數(shù){拷貝構(gòu)造函數(shù);默認(rèn)構(gòu)造函數(shù)};析構(gòu)函數(shù)}}
成員函數(shù){參數(shù)默認(rèn)值;函數(shù)重載;引用;const;}
對象實(shí)例化{堆中實(shí)例化;棧中實(shí)例化;}查看全部 -
//Teacher.h文件 class?Teacher {public:?Teacher(string?name?=?"Jim",int?age?=?18);//構(gòu)造函數(shù) ?????????Teacher(const?Teacher?&tea);?//拷貝構(gòu)造函數(shù) ?????????~Teacher();?//析構(gòu)函數(shù) ?}
//Teacher.cpp文件 Teacher::Teacher(string?name,?int?age):m_strName(name),m_iAge(age) {cout<<"Teacher(string?name,int?age)"<<endl;} Teaher::Teacher(const?Teacher?&tea) {cout<<"Teacher(const?Teacher?&tea)"<<endl;} Teacher::~Teacher() {cout<<"~Teacher()"<<endl;}
//demo.cpp文件 int?main(void) {Teacher?t1;??//用棧實(shí)例化對象 ?Teacher?*p?=?new?Teacher(); ?delete?p;?//用堆實(shí)例化對象 }
查看全部 -
對象生命歷程:
申請內(nèi)存—初始化列表——構(gòu)造函數(shù)—
參與運(yùn)算——析構(gòu)函數(shù)——釋放內(nèi)存
查看全部 -
析構(gòu)函數(shù):
class?Student {public:?Student()? ?????????{m_pName?=?new?char[20]} ?????????~Student() ?????????{delete?[]m_pName;} ?private:char?*m_pName;
查看全部 -
拷貝函數(shù)的初始化?
?Teacher(const?Teacher?&tea)?:?????????????????????????????????????????????????????????????? ??m_strName(tea.m_strName),??????????????????????????????? ??m_age(tea.m_age)?{...}???????????????????????????? ??Teacher(const?Teacher?&?tea){}
??
在作為傳遞參數(shù)的時候 拷貝函數(shù)也會被調(diào)用
查看全部
舉報(bào)