版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄2.1類和對(duì)象2.2構(gòu)造函數(shù)和析構(gòu)函數(shù)2.3Qt窗口及部件初探2.4更復(fù)雜的類和對(duì)象2.5相關(guān)指針2.6Qt信號(hào)槽通信機(jī)制2.1類和對(duì)象...姓名:小麗體重:50kg吃飯(1碗)睡覺(8小時(shí))姓名:小明體重: 70kg吃飯(2碗)睡覺(9小時(shí))人:姓名體重吃飯睡覺對(duì)象對(duì)象類:它是是對(duì)具有共同特征的一組事物(對(duì)象)進(jìn)行的抽象。這些事物具有一些通用的屬性和一些通用的行為。屬性行為2.1類和對(duì)象類是一種數(shù)據(jù)類型,包括兩方面的內(nèi)容:數(shù)據(jù)成員—以何種格式存儲(chǔ)數(shù)據(jù)信息一個(gè)類中可有多個(gè)數(shù)據(jù)成員;數(shù)據(jù)成員類型可以是基本數(shù)據(jù)類型、也可以是指針、類(非本類)等類型;類中的所有數(shù)據(jù)成員共同構(gòu)成了類中數(shù)據(jù)的存儲(chǔ)形式。成員函數(shù)--可以實(shí)施的行為成員函數(shù)需要實(shí)現(xiàn);類經(jīng)定義和實(shí)現(xiàn)后,就可以像基本的數(shù)據(jù)類型一樣使用。2.1.1類的定義class
類名{public:數(shù)據(jù)成員
//具有公有訪問權(quán)限成員函數(shù)
//具有公有訪問權(quán)限private:數(shù)據(jù)成員
//具有私有訪問權(quán)限成員函數(shù)
//具有私有訪問權(quán)限protected:數(shù)據(jù)成員
//具有保護(hù)訪問權(quán)限成員函數(shù)
//具有保護(hù)訪問權(quán)限};表示屬性表示行為定義類類型的關(guān)鍵字表示訪問權(quán)限的關(guān)鍵字2.1.1類的定義class
Time
{
int
hour,minute,second;
public:
void
setTime(int
h,int
m,int
s)
{
hour=h;
minute=m;
second=s;
}
void
showTime()
{
cout<<hour<<":"<<minute<<":"<<second<<endl;
}
};在類內(nèi)定義的成員函數(shù)默認(rèn)為內(nèi)聯(lián)成員函數(shù)默認(rèn)具有私有訪問權(quán)限例:2.1.1類的定義class
Time
{
int
hour,minute,second;
public:
void
setTime(int
h,int
m,int
s);
void
showTime();
};
void
Time::setTime(int
h,int
m,int
s)
{
hour=h;
minute=m;
second=s;
}
void
Time::showTime()
{
cout<<hour<<":"<<minute<<":"<<second<<endl;
}類外定義的成員函數(shù)若希望為內(nèi)聯(lián)函數(shù),可在聲明或定義時(shí),返回類型前加inline關(guān)鍵字例:2.1.1類的定義訪問權(quán)限:用來限制類成員是否對(duì)外界可見,以及多大范圍內(nèi)可以被訪問和使用??梢越o類中的不同數(shù)據(jù)成員和成員函數(shù)設(shè)置不同的訪問權(quán)限。函數(shù)對(duì)成員的訪問public公有成員private私有成員protected保護(hù)成員本類成員函數(shù)可以訪問使用形式:成員名可以訪問使用形式:成員名可以訪問使用形式:成員名其他函數(shù)可以訪問使用形式:對(duì)象名.公有成員不能訪問不能訪問表2-1類成員的訪問權(quán)限數(shù)據(jù)成員一般建議聲明為具有私有訪問權(quán)限(以實(shí)現(xiàn)信息的隱藏),對(duì)數(shù)據(jù)成員的訪問通過公有成員函數(shù)間接實(shí)現(xiàn)。2.1.2對(duì)象的定義與使用已有Time類后,可以用它來定義對(duì)象。例如:
Time
getUpTime;
Time
arrivalTime,departureTime;
cout<<sizeof(getUpTime); //輸出結(jié)果為12
arrivalTime=departureTime;
//對(duì)象之間可以相互賦值也可以在定義類的同時(shí)定義對(duì)象。例如:
class
Time
{
int
hour,minute,second;
public:
void
setTime(int
h,int
m,int
s)
{
hour=h;
minute=m;
second=s;
}
void
showTime()
{
cout<<hour<<":"<<minute<<":"<<second<<endl;
}
}
bellTime;2.1.2對(duì)象的定義與使用已有對(duì)象后,可使用圓點(diǎn)運(yùn)算符.來訪問其數(shù)據(jù)成員和成員函數(shù)。例如:
getUpTime.setTime(6,30,0);
getUpTime.showTime();
//輸出結(jié)果為6:30:0
getUpTime.hour=3;
//錯(cuò)誤。在類外,對(duì)象不能直接訪問私有數(shù)據(jù)如果setTime函數(shù)傳入的數(shù)據(jù)不符合實(shí)際情況會(huì)怎么樣?例如:
getUpTime.setTime(-6,80,-5);2.1.2對(duì)象的定義與使用void
Time::setTime(int
h,int
m,int
s){
if(h>23)
hour=23;
else
if(h<0)
hour=0;
else
hour=h;
if(m>59)
minute=59;
else
if(m<0)
minute=0;
else
minute=m;
if(s>59)
second=59;
else
if(s<0)
second=0;
else
second=s;}保證了對(duì)象內(nèi)部實(shí)際存儲(chǔ)的時(shí)為0到23之間的整數(shù)、分和秒為0到59之間的整數(shù)僅能通過公有接口間接的操縱私有數(shù)據(jù)成員2.1.3this指針2.1.3this指針成員函數(shù)的代碼是存儲(chǔ)在對(duì)象的內(nèi)存空間之外的,由所有對(duì)象共用。如:
getUpTime.setTime(6,30,0);
arrivalTime.setTime(8,20,30);實(shí)際執(zhí)行的是代碼區(qū)中的同一代碼段。void
Time::setTime(
int
h,int
m,int
s){
if(h>23)
hour=23;
else
if(h<0)
hour=0;
else
hour=h;
if(m>59)
minute=59;
else
if(m<0)
minute=0;
else
minute=m;
if(s>59)
second=59;
else
if(s<0)
second=0;
else
second=s;
}問題:如何區(qū)分兩次運(yùn)行時(shí),設(shè)置的是不同對(duì)象的私有數(shù)據(jù)成員呢?也可以使用等價(jià)的寫法:This->void
Time::setTime(Time*constregisterthis,
int
h,int
m,int
s)
{
if(h>23)
(*this).hour=23;
//
this指向當(dāng)前調(diào)用對(duì)象
else
if(h<0)
(*this).hour=0;
else
(*this).hour=h;
if(m>59)
(*this).minute=59;
else
if(m<0)
(*this).minute=0;
else
(*this).minute=m;
if(s>59)
(*this).second=59;
else
if(s<0)
(*this).second=0;
else
(*this).second=s;
}2.1.3this指針答案:在每個(gè)(非靜態(tài))成員函數(shù)中都包含著一個(gè)特殊的指針this。它是系統(tǒng)自動(dòng)創(chuàng)建的;值是當(dāng)前調(diào)用成員函數(shù)的對(duì)象所在的起始地址,即:始終指向當(dāng)前調(diào)用成員函數(shù)的對(duì)象。2.1.3this指針一般情況下不顯式的使用this指針。但也會(huì)有一些特殊的情況:void
Time::setTime(int
hour,int
minute,int
second)
{
if(hour>23)
this->hour=23;
else
if(hour<0)
this->hour=0;
else
this->hour=hour;
if(minute>59)
this->minute=59;
else
if(minute<0)
this->minute=0;
else
this->minute=minute;
if(second>59)
this->second=59;
else
if(second<0)
this->second=0;
else
this->second=second;
}函數(shù)內(nèi)部hour表示的是形參hour,要想使用類數(shù)據(jù)成員hour,必須用this->hour2.1.4項(xiàng)目文件組織項(xiàng)目建議采用多文件的組織方式。例如:對(duì)于類,通常會(huì)把它的定義寫在一個(gè)頭文件里,把它的成員函數(shù)實(shí)現(xiàn)寫在一個(gè)源文件中。例2_1:
圖2-2項(xiàng)目文件構(gòu)成好處:程序更加清晰明了,也方便管理和維護(hù)。類的使用者只需閱讀頭文件即可了解類的信息。多文件組織的方式減輕了編譯的工作量。2.1.4項(xiàng)目文件組織條件編譯指令:#ifndefTIME_H#defineTIME_H
class
Time
{
int
hour;
int
minute;
int
second;
public:
void
setTime(int
h,int
m,int
s);
void
showTime();
};
#endif//
TIME_H作用:防止一個(gè)源文件中兩次或多次包含同一個(gè)頭文件。目錄2.1類和對(duì)象2.2構(gòu)造函數(shù)和析構(gòu)函數(shù)2.3Qt窗口及部件初探2.4更復(fù)雜的類和對(duì)象2.5相關(guān)指針2.6Qt信號(hào)槽通信機(jī)制2.2構(gòu)造函數(shù)和析構(gòu)函數(shù)考慮如下的輸出結(jié)果?
Time
time;
time.showTime();結(jié)論:數(shù)據(jù)成員應(yīng)先賦值再使用。C++中提供了構(gòu)造函數(shù)機(jī)制,以完成對(duì)象初始化的工作。同樣的,也提供了析構(gòu)函數(shù)機(jī)制,以便在對(duì)象空間被回收之前進(jìn)行一些收尾的工作。2.2.1構(gòu)造函數(shù)構(gòu)造函數(shù)是類的成員函數(shù),在生成對(duì)象時(shí)由系統(tǒng)自動(dòng)調(diào)用。特殊之處:構(gòu)造函數(shù)名必須與類名相同;構(gòu)造函數(shù)沒有返回類型;構(gòu)造函數(shù)在類對(duì)象生成的時(shí)候由系統(tǒng)自動(dòng)調(diào)用執(zhí)行,不能由程序員顯式調(diào)用;訪問權(quán)限為公有的。2.2.1構(gòu)造函數(shù)無參構(gòu)造函數(shù)例:在Time類public:范圍內(nèi)添加聲明:
Time();
類外添加定義:
Time::Time()
{
hour=0;
minute=0;
second=0;
}Time
getUpTime;getUpTime.showTime();0:0:02.2.1構(gòu)造函數(shù)無參構(gòu)造函數(shù)初始化列表:位于構(gòu)造函數(shù)頭之后,以:開頭引出。例:
Time::Time():hour(0),minute(0),second(0)
{ }class
Time
{
int
hour;
int
minute;
int
second;
public:
void
setTime(int
h,int
m,int
s);
void
showTime();
};
2.2.1構(gòu)造函數(shù)普通帶參構(gòu)造函數(shù)例:
在Time類public:范圍內(nèi)新增聲明:
Time(int
h,int
m,int
s);
類外新增定義:
Time::Time(int
h,int
m,int
s)
:hour(h),minute(m),second(s)
{
}
Time
arrivalTime(10,25,10);arrivalTime.showTime();10:25:10傳遞給帶參構(gòu)造函數(shù)的值需在對(duì)象定義的同時(shí)給出:2.2.1構(gòu)造函數(shù)普通帶參構(gòu)造函數(shù)構(gòu)造函數(shù)的參數(shù)可以有默認(rèn)值。例如,更新聲明如下:
Time(int
h,int
m,int
s=0);
Time
departureTime
(12,30);departureTime.showTime();12:30:02.2.1構(gòu)造函數(shù)普通帶參構(gòu)造函數(shù)有多個(gè)構(gòu)造函數(shù)時(shí),會(huì)根據(jù)對(duì)象所帶參數(shù)自動(dòng)匹配對(duì)應(yīng)的構(gòu)造函數(shù)。例:在Time類public:范圍內(nèi)新增聲明:
Time(int
h);
類外新增定義:
Time::Time(int
h)
:hour(h),minute(0),second(0)
{
}
Time
getUpTime;getUpTime.showTime();
Time
arrivalTime(10,25,10);
arrivalTime.showTime();
Time
departureTime(12,30);
departureTime.showTime();
Time
bellTime(16);
bellTime.showTime();0:0:010:25:012:30:016:0:02.2.1構(gòu)造函數(shù)普通帶參構(gòu)造函數(shù)每個(gè)類都必須要有構(gòu)造函數(shù),系統(tǒng)在對(duì)象生成時(shí)會(huì)根據(jù)參數(shù)列表,自動(dòng)調(diào)用合適的構(gòu)造函數(shù)。問題:項(xiàng)目2_1中并沒有定義構(gòu)造函數(shù)?如果程序員未定義任何構(gòu)造函數(shù),系統(tǒng)會(huì)幫忙生成默認(rèn)構(gòu)造函數(shù)。例如項(xiàng)目2_1,編譯時(shí)會(huì)自動(dòng)添加如下構(gòu)造函數(shù):
Time::Time()
{
}該函數(shù)不做任何事情,它存在的意義只在于定義對(duì)象時(shí),使得系統(tǒng)至少一定能夠找到一個(gè)構(gòu)造函數(shù)。2.2.1構(gòu)造函數(shù)3.復(fù)制構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),它的形參必須是本類的引用,完成使用本類已有對(duì)象來初始化一個(gè)新對(duì)象的功能。例:在Time類public:范圍內(nèi)新增聲明:
Time(const
Time&
obj);
類外新增定義:
Time::Time(const
Time&
obj)
{
cout<<"Copy
Constructor
is
Called."<<endl;
hour=obj.hour+1;
minute=obj.minute;
second=obj.second;
}Time
bellTime(16);
bellTime.showTime();Time
offDutyTime(bellTime);
offDutyTime.showTime();
16:0:0CopyConstructorisCalled.17:0:02.2.1構(gòu)造函數(shù)3.復(fù)制構(gòu)造函數(shù)復(fù)制構(gòu)造函數(shù)在函數(shù)形參為對(duì)象時(shí)會(huì)被調(diào)用。例:添加一個(gè)func1函數(shù):
void
func1(Time
time)
{
time.showTime();
}Time
bellTime(16);
bellTime.showTime();func1(bellTime);16:0:0CopyConstructorisCalled.17:0:02.2.1構(gòu)造函數(shù)3.復(fù)制構(gòu)造函數(shù)復(fù)制構(gòu)造函數(shù)在一個(gè)對(duì)象以值傳遞的方式從函數(shù)返回時(shí)會(huì)被調(diào)用。例:添加一個(gè)func2函數(shù):
Time
func2()
{
Time
time(18);
time.showTime();
return
time;
}
func2().showTime();18:0:018:0:018:0:0CopyConstructorisCalled.19:0:02.2.1構(gòu)造函數(shù)4.就地初始化數(shù)據(jù)成員(需C++11標(biāo)準(zhǔn)支持)例:
class
Time
{
int
hour=0;
int
minute{0};
int
second=0;
//不支持如
int
second(0);的寫法
public:
void
showTime();
};
靜態(tài)且不具有常屬性的數(shù)據(jù)成員不能就地初始化2.2.2析構(gòu)函數(shù)也是一種特殊的成員函數(shù),在對(duì)象的內(nèi)存空間被回收之前由系統(tǒng)自動(dòng)調(diào)用。特殊之處:析構(gòu)函數(shù)名與類名相同,前面加個(gè)~以與構(gòu)造函數(shù)區(qū)分。訪問權(quán)限為公有的;析構(gòu)函數(shù)不帶任何參數(shù),也沒有返回類型(包括void);每個(gè)類只能有一個(gè)析構(gòu)函數(shù),不能重載;沒有定義析構(gòu)函數(shù)時(shí),系統(tǒng)會(huì)默認(rèn)生成一個(gè)什么也不做的析構(gòu)函數(shù);析構(gòu)函數(shù)可以像普通成員函數(shù)一樣被調(diào)用,但不建議這么做。2.2.2析構(gòu)函數(shù)例:
在Time類public:范圍內(nèi)新增聲明: ~Time();
類外新增定義: Time::~Time()
{
cout<<"destructor
is
called."<<endl;
}2.2.2析構(gòu)函數(shù)析構(gòu)函數(shù)常見的應(yīng)用情形--例2_2(部分代碼):
MyString::MyString(char*
str){
int
length;
for(length=0;str[length]!='\0';length++)
ptr=new
char[length+1];
for(int
i=0;i<length;i++)
ptr[i]=str[i];
ptr[length]='\0’;
}
MyString::~MyString()
{
delete
[]
ptr;
}
申請(qǐng)了動(dòng)態(tài)的空間應(yīng)在析構(gòu)時(shí)釋放,以免造成內(nèi)存泄漏目錄2.1類和對(duì)象2.2構(gòu)造函數(shù)和析構(gòu)函數(shù)2.3Qt窗口及部件初探2.4更復(fù)雜的類和對(duì)象2.5相關(guān)指針2.6Qt信號(hào)槽通信機(jī)制2.3Qt窗口及部件初探窗口部件是程序與用戶進(jìn)行交互的圖形化組件。功能:在標(biāo)準(zhǔn)輸出設(shè)備上繪制自己、顯示信息、接收用戶操作鼠標(biāo)鍵盤等形成的輸入、作為容器在其內(nèi)放置其它部件等。每個(gè)窗口部件都占據(jù)一塊矩形的圖形區(qū)域。從使用的角度來看,窗口部件可分為:窗口(頂級(jí)部件):指沒有嵌入到其它部件中的部件。子部件(非窗口部件):一般作為窗口中的一個(gè)組件存在(即:有父窗口)2.3.1窗口類標(biāo)題欄窗口標(biāo)題用戶區(qū)整個(gè)屏幕區(qū)域x軸y軸y()x()pos()frameGeometry().height()geometry().height()frameGeometry().width()geometry().x()geometry().y()geometry().width()2.3.1窗口類1.QWidget基本窗口2.3.1窗口類2.QDialog對(duì)話框用于完成一些較為短小的任務(wù)、或和用戶進(jìn)行簡(jiǎn)單交互。QDialogQDialog2.3.1窗口類2.QDialog對(duì)話框可有模態(tài)和非模態(tài)兩種狀態(tài)。2.3.1窗口類2.QDialog對(duì)話框例2_5(部分代碼)
QDialog
dlg1,dlg2;
dlg1.setWindowTitle("我是對(duì)話框1");
dlg1.exec();
dlg2.setModal(true);
dlg2.setWindowTitle("我是對(duì)話框2");
dlg2.resize(200,100);
dlg2.show();
QWidget
w;
w.setWindowTitle("我是基本窗口");
w.show();2.3.1窗口類2.QDialog對(duì)話框例2_6(部分代碼)
QWidget
w1,w2;
w1.setWindowTitle("我是基本窗口1");
w1.show();
w2.setWindowTitle("我是基本窗口2");
w2.move(100,100);
w2.show();
QDialog
dlg(&w1);
dlg.setWindowTitle("我是對(duì)話框");
dlg.resize(200,100);
dlg.setWindowModality(Qt::WindowModal);
dlg.show();
2.3.1窗口類3.QMainWindow主窗口是一個(gè)可以設(shè)置菜單條、工具欄、狀態(tài)條的窗口。例2_7(部分代碼)
QMainWindow
w;QMenuBar
menuBar(&w);
QMenu
menu1(&menuBar),menu2(&menuBar),subMenu(&menuBar);
subMenu.setTitle("打開");
//設(shè)置菜單內(nèi)容
subMenu.addAction("打開項(xiàng)目");
subMenu.addAction("打開文件");
menu1.setTitle("文件");
menu1.addMenu(&subMenu);
menu1.addAction("關(guān)閉");
menu2.setTitle("編輯");
menuBar.addMenu(&menu1);
//添加菜單和菜單欄
menuBar.addMenu(&menu2);
w.setMenuBar(&menuBar);
w.show();
//主窗口顯示2.3.2部件類例2_8(部分代碼)
QWidget
w;
w.resize(400,300);
QLabel
label(&w);
label.setText("我是一個(gè)標(biāo)簽");
label.move(10,10);
QPushButton
btn(&w);
btn.move(200,10);
btn.setText("我是一個(gè)按鈕");
QLineEdit
lineEdit(&w);
lineEdit.move(10,50);
lineEdit.setText("我是單行文本框");
lineEdit.setFocus();
QTextEdit
textEdit(&w);
textEdit.move(10,100);
textEdit.setText("我是多行文本框");2.3.2部件類例2_8(部分代碼)
QFont
font;
font.setPointSize(18);
font.setFamily("隸書");
font.setItalic(true);
w.setFont(font);
QPalette
plt;
plt.setColor(QPalette::Foreground,Qt::red);
plt.setColor(QPalette::Background,QColor(0,255,0));
label.setPalette(plt);
label.setAutoFillBackground(true);
btn.setStyleSheet("background-color:blue");
lineEdit.setStyleSheet("color:blue");textEdit.setTextColor(Qt::red);textEdit.append("我可以設(shè)置顏色");
textEdit.append("<font
color='green'>這是HTML
格式的文字</font>");目錄2.1類和對(duì)象2.2構(gòu)造函數(shù)和析構(gòu)函數(shù)2.3Qt窗口及部件初探2.4更復(fù)雜的類和對(duì)象2.5相關(guān)指針2.6Qt信號(hào)槽通信機(jī)制2.4.1類的組合類中數(shù)據(jù)成員的類型可以是自定義的類型,這就構(gòu)成了類的組合。class
TrainInfo
{
unsigned
platform;
string
trainNumber;
Time
arrivalTime,departureTime;
public:
TrainInfo();
TrainInfo(unsigned
plat,string
traNum,int
arrH,int
arrM,
int
arrS,
int
dptH,int
dptM,int
dpt);
void
showInfo();
~TrainInfo();
};C++標(biāo)準(zhǔn)庫(kù)中的提供的字符串類類型自定義的Time類類型2.4.1類的組合組合類設(shè)計(jì)時(shí),要考慮到對(duì)對(duì)象成員的初始化。TrainInfo::TrainInfo():platform(0){
cout<<"Constructor
of
TrainInfo
is
called."
<<endl;
}TrainInfo::TrainInfo(unsigned
plat,string
traNum,int
arrH,int
arrM,int
arrS,
int
dptH,int
dptM,int
dptS):platform(plat),trainNumber(traNum),
arrivalTime(arrH,arrM,arrS),
departureTime(dptH,dptM,dptS)
{
cout<<"Constructor
with
8
parameters
of
TrainInfo
is
called."
<<"I'm
info
of
train
"<<traNum<<endl;
}2.4.1類的組合在組合類對(duì)象生成時(shí),執(zhí)行如下步驟:(1)按照組合類對(duì)象定義時(shí)給出的實(shí)參列表,選擇合適的組合類構(gòu)造函數(shù),將實(shí)參賦值給對(duì)應(yīng)形參。(2)按照類中數(shù)據(jù)成員的聲明順序依次給每個(gè)數(shù)據(jù)成員分配內(nèi)存空間并初始化。對(duì)基礎(chǔ)類型的數(shù)據(jù)成員:若未在初始化列表中進(jìn)行初始化,則存儲(chǔ)的是不確定的值;否則在分配空間的同時(shí)進(jìn)行初始化。對(duì)于成員對(duì)象,若未在初始化列表中初始化,則分配空間的同時(shí)調(diào)用該成員對(duì)象的默認(rèn)構(gòu)造函數(shù)初始化;否則按照初始化參數(shù)列表調(diào)用成員對(duì)象相應(yīng)的構(gòu)造函數(shù)來完成初始化。
(3)執(zhí)行組合類對(duì)象構(gòu)造函數(shù)的函數(shù)體。例2_92.4.1類的組合組合對(duì)象的析構(gòu)順序如下:執(zhí)行組合對(duì)象的析構(gòu)函數(shù)體。(2)對(duì)于組合對(duì)象中的數(shù)據(jù)成員,按照聲明順序的逆序釋放每個(gè)數(shù)據(jù)成員的內(nèi)存空間。如果該數(shù)據(jù)成員為成員對(duì)象,則在釋放該成員對(duì)象的空間前調(diào)用并執(zhí)行該成員對(duì)象的析構(gòu)函數(shù)。例2_9對(duì)于兩個(gè)同作用域的對(duì)象:生成時(shí)按照聲明的先后順序分配空間,析構(gòu)時(shí)按照聲明順序的逆序進(jìn)行銷毀。2.4.2對(duì)象數(shù)組和基礎(chǔ)數(shù)據(jù)類型一樣,類也可以定義數(shù)組,稱為對(duì)象數(shù)組。例:Time
Time1Array[2];
Time
Time2Array[2]={};
Time
Time4Array[3]={{16},{},{8,30,1}};
Time
Time5Array[2]={{17}};
、
for(int
i=0;i<2;i++)
Time5Array[i].showTime();2.4.3類的嵌套class
Student
{
public:
enum
EduLevel{Pupil,JuniorStudent,HighSchoolStudent,UnderGraduate,GraduateStudent};
Student(string
_name="default
name",EduLevel
_eduLevel=Pupil)
:name(_name),eduLevel(_eduLevel)
{
}
void
show();private:
class
Family
{
string
mother,father,tel,address;
public:
Family(string
_mother="undefined",string
_father="undefined",
string
_tel=,string
_addr="Default
Address")
:mother(_mother),father(_father),tel(_tel),address(_addr)
{
}
void
show();
};
string
name;
Family
family;
EduLevel
eduLevel;
static
int
x;
};2.4.3類的嵌套在一個(gè)類的內(nèi)部定義另一個(gè)類(或結(jié)構(gòu)體、共用體、枚舉類型等),稱之為類的嵌套。內(nèi)部的類型稱為嵌套類,外部的類稱為外圍類。一般用于外圍類中需要使用嵌套類對(duì)象作為數(shù)據(jù)成員,而該嵌套類也只用于外圍類內(nèi)成員的定義時(shí)的情形。嵌套類和外圍類之間沒有包含關(guān)系。特點(diǎn):
嵌套類必須聲明在外圍類的內(nèi)部。
嵌套類名受外圍類訪問權(quán)限的控制。一般建議將嵌套類設(shè)置為私有的2.4.3類的嵌套例2_11(部分代碼)
void
Student::Family::show(){
//......}//...int
main(){
Student::EduLevel
level(Student::HighSchoolStudent);
Student
stu1("Tom",level);
//
Student::Family
f;
stu1.show();
return
0;
}目錄2.1類和對(duì)象2.2構(gòu)造函數(shù)和析構(gòu)函數(shù)2.3Qt窗口及部件初探2.4更復(fù)雜的類和對(duì)象2.5相關(guān)指針2.6Qt信號(hào)槽通信機(jī)制2.5.1對(duì)象指針指針變量中存儲(chǔ)的是一個(gè)對(duì)象整體內(nèi)存空間首字節(jié)的編碼,稱指針指向此對(duì)象,指針稱為對(duì)象指針。例如: Time
time,*timePtr(&time); timePtr->showTime();
(*timePtr).showTime();
time.showTime();等價(jià)2.5.2對(duì)象數(shù)據(jù)成員指針指針指向某對(duì)象中的數(shù)據(jù)成員,稱為對(duì)象數(shù)據(jù)成員指針。此時(shí)指針類型應(yīng)當(dāng)是數(shù)據(jù)成員的類型,而非對(duì)象的類型。例如:Time類的hour、minute數(shù)據(jù)成員具有公有訪問權(quán)限的前提下:
Time
time,sleepTime;
int
*intPtr=&time.hour;
cout<<*intPtr;
//等同于cout<<time.hour;
intPtr=&sleepTime.minute;
cout<<*intPtr;
//等同于cout<<sleepTime.minute;2.5.3類數(shù)據(jù)成員指針指針還可以指向類的數(shù)據(jù)成員,稱為類數(shù)據(jù)成員指針。與對(duì)象數(shù)據(jù)成員指針不同,不涉及具體的對(duì)象,它在定義時(shí)必須和類關(guān)聯(lián)。例如:Time類的hour、minute數(shù)據(jù)成員具有公有訪問權(quán)限的前提下:
int
Time::*intMemberPtr=&Time::hour;
Time
time,*ptrTime=&time;
int
*intPtr=&time.hour;
cout<<time.hour<<endl;
cout<<ptrTime->hour<<endl;
cout<<*intPtr<<endl;
cout<<time.*intMemberPtr<<endl;
cout<<ptrTime->*intMemberPtr<<endl; intMemberPtr=&Time::minute;
等價(jià)目錄2.1類和對(duì)象2.2構(gòu)造函數(shù)和析構(gòu)函數(shù)2.3Qt窗口及部件初探2.4更復(fù)雜的類和對(duì)象2.5相關(guān)指針2.6Qt信號(hào)槽通信機(jī)制2.6Qt信號(hào)槽通信機(jī)制是Qt框架所特有的機(jī)制隱藏了復(fù)雜的底層實(shí)現(xiàn),使得對(duì)象間的交互
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中職第二學(xué)年(直播場(chǎng)控)運(yùn)營(yíng)技巧階段測(cè)試題及答案
- 2025年中職(會(huì)計(jì)電算化)會(huì)計(jì)檔案管理試題及答案
- 神木市消防安全培訓(xùn)指南
- 病毒防疫知識(shí)課件
- 四川省綿陽市2026屆高三第二次診斷性考試歷史試卷(含答案)
- 2026廣東惠州市龍門縣教育局赴高校招聘急需緊缺學(xué)科教師招聘60人備考題庫(kù)(江西師范大學(xué)場(chǎng)編制)完整參考答案詳解
- 2026新疆天潤(rùn)唐王城乳品有限公司招聘6人備考題庫(kù)及完整答案詳解1套
- 2026年淄博高青縣教育和體育局所屬事業(yè)單位公開招聘工作人員的備考題庫(kù)(25人)有答案詳解
- 2026四川雅安市監(jiān)察留置看護(hù)人員招聘90人備考題庫(kù)及參考答案詳解一套
- 2026云南西雙版納州中級(jí)人民法院第一次招聘聘用制審判輔助人員1人備考題庫(kù)及參考答案詳解
- 2024年4月自考00167勞動(dòng)法試題
- (正式版)SHT 3115-2024 石油化工管式爐輕質(zhì)澆注料襯里工程技術(shù)規(guī)范
- 高溫高壓CFB鍋爐安裝技術(shù)交底
- 防職場(chǎng)性騷擾培訓(xùn)課件
- 設(shè)備維護(hù)與管理培訓(xùn)課件
- 01管道儀表流程圖中常用圖例符號(hào)
- 如何組織臨床小講課(全科師資培訓(xùn)課程)
- 繼電保護(hù)課后習(xí)題答案第二版-張保會(huì)-尹項(xiàng)根
- 播種施肥機(jī)械
- 初中校本課程-【課堂實(shí)錄】美麗的24節(jié)氣教學(xué)設(shè)計(jì)學(xué)情分析教材分析課后反思
- GB/T 12496.19-2015木質(zhì)活性炭試驗(yàn)方法鐵含量的測(cè)定
評(píng)論
0/150
提交評(píng)論