上一篇我們大體瞭解了什麼是類、類與對象的關係,那麼如何定義一個類呢?
類的聲明形式
class 類名{
public:
公有成員(外部接口)
private:
私有成員
protect:
保護成員
};
像public這種叫做訪問屬性;
定義時;類的屬性、數據一般定義爲private
********;對類的操作(函數)一般定義爲public
且最後以分號==;==結束。
訪問屬性的特點
private:只能由
1.該類中的函數、
2.其友元函數訪問。 不能被任何其他訪問,該類的對象也不能訪問
protected:可以被
1.該類中的函數、
2.派生類的函數、以及
3.其友元函數訪問。 但不能被該類的對象訪問。
public:可以被
1.該類中的函數、
2.派生類的函數、
3.其友元函數訪問,也可以由
4.該類的對象訪問。
類的聲明時不能對類的成員初始化,如以下就是錯誤的演示
成員函數
定義可分爲兩種;一種是完全在類中定義,
*****************;一種是函數中說明原型,在類外給給出函數體
並在函數名錢使用類名加以限定
在類外定義函數體形式爲;
返回類型 類名::成員函數名(參數表)
{
//函數體
}
比如下面一個例子;
class Clock
{
public:
void SetTime(int NewH,int NewM,int NemS);
void ShowTime(); //類內聲明原型
private:
int Hour,Minute,Second;
};
void Clock::SetTime(int NewH,int NewM,int NemS); //類外給出函數體
{ Hour=NewH;
Minute= NewM;
Second=NemS;
}
void Clock::ShowTime()
{cout<<Hour<<":"<<Minute<<":"<<Second;
}
從上面可以看出當類內函數參數是類內數據時可以省略參數,比如ShowTime()函數
對象
類可以說描述了一類問題的共同屬性和行爲;
類的對象時改類的實例或實體,即類的變量。
對象的聲明形式:
類名 對象名;
例r如用上面定義的類,聲明對象
Clock myClock;
類中成員的訪問
在類外只能訪問public中的成員;
訪問方式;1
對象名.成員名
2。定義類指針訪問;如有一個student類;
student stud1,*p; //定義類指針
p=&stud1;
p_>成員,(*p).成員 //指針訪問形式
3.通過對象的引用訪問對象中成員
stdent stud1;
student &stud2=stud1;
cout<<stud2.成員
程序一;輸入時分秒
#include <iostream>
using namespace std;
class Time
{public:
int hour;
int minute;
int sec; //類中僅有數據無函數
};
int main()
{Time t1;
cin>>t1.hour;
cin>>t1.minute;
cin>>t1.sec;
cout<<t1.hour<<":"<<t1.minute<<":"<<t1.sec<<endl;
}
用函數輸入輸出時分秒
。。。。。。 //借用上面的類定義
int main()
{void set_time(Time&); //原型聲明
void show_time(Time&);
Time t1;
set_time(t1);
show_time(t1);
}
void set_time(Time& t) //定義函數
{cin>>t.hour;
cin>>t.minute;
cin>>t.sec; }
void show_time(Time& t)
{cout<<t.hour<<″:″ <<t.minute<<″:″ <<t.sec<<endl; }
要想用函數改變參數(變量)的值,兩種方法;
1.指針
2.引用(上面就是用這種方法)
用類成員函數輸入輸出
因爲成員函數用的是成員數據故變量參數可以省略
#include<iostream>
using namespace std;
class Time
{ public:
void set_time( );
void show_time( ); //函數原型聲明
private:
int hour; i
nt minute;
int sec;};
void Time∷set_time( ) //類外給出函數體
{cin>>hour;
cin>>minute;
cin>>sec;}
void Time::show_time()
{cout<<hour<<″:″ <<minute<<″:″ <<sec<<endl;}
int main() //主函數
{ Time t1;
t1.set_time( ); //調用t1的函數成員設置時間
t1.show_time( ); //調用t1函數 輸出時間
return 0;
}
類外輸入傳值給成員數據並輸出
#include<iostream>
using namespace std;
class Clock
{public:
void SetTime(int NewH, int NewM, int NewS);
void ShowTime();
private:
int Hour, Minute, Second; }; //定義類
void Clock::SetTime(int NewH, int NewM,int NewS) //類外函數
{ Hour=NewH;
Minute=NewM;
Second=NewS;}
void Clock::ShowTime()
{ cout<<Hour<<":"<<Minute<<":"<<Second;}
int main()
{ Clock myClock,yourClock;
int h,m,s;
myClock.SetTime(8,30,30); //調用myClock中的函數SetTime( ...)
myClock.ShowTime();
cin>>h>>m>>s;
yourClock.SetTime(h,m,s);
yourClock.ShowTime();
}
輸出結果;