欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++類(lèi)和對(duì)象實(shí)例解析(二)

 更新時(shí)間:2015年08月11日 10:03:32   投稿:lijiao  
這篇文章主要介紹了C++類(lèi)和對(duì)象,從定義出發(fā)再到實(shí)例解析,深入的理解C++類(lèi)和對(duì)象,需要的朋友可以參考下

C++既是面向?qū)ο笠彩敲嫦蜻^(guò)程的語(yǔ)言,在這里就有一個(gè)重要的概念——類(lèi)。
        何謂類(lèi)?類(lèi)是對(duì)對(duì)象的一種抽象,舉例來(lái)講:每一個(gè)實(shí)實(shí)在在存在的人就是一個(gè)對(duì)象,人有很多共同的特征(一個(gè)頭,兩條腿,能走,能跑),這具有共同特征的人就成為一個(gè)類(lèi)。類(lèi)是一個(gè)抽象的名詞,每一個(gè)人(即對(duì)象)是這個(gè)類(lèi)的實(shí)例。
        對(duì)象間具有的共同特征是對(duì)象的屬性和行為。錄像機(jī)是一個(gè)對(duì)象,它的屬性是生產(chǎn)廠家、牌子、重量、顏色等等,它的行為就是它的功能,如錄像、放像、快進(jìn)、倒退等操作。
C++程序中,需要先定義一個(gè)類(lèi),形如:
  Class 類(lèi)名
     {
        定義變量;
        ….
        定義函數(shù)
      }
在類(lèi)體中時(shí)成員列表,包括數(shù)據(jù)和操作數(shù)據(jù)的函數(shù),即數(shù)據(jù)成員、成員函數(shù)。這體現(xiàn)了類(lèi)的封裝性和信息的隱蔽性。
成員函數(shù)一般在類(lèi)體中聲明,在類(lèi)體外定義。
構(gòu)造函數(shù):對(duì)對(duì)象進(jìn)行賦值
析構(gòu)函數(shù):在函數(shù)功能域結(jié)束時(shí),釋放對(duì)象成員的空間。
內(nèi)聯(lián)函數(shù):為了節(jié)省函數(shù)調(diào)用的時(shí)間
完成各種功能函數(shù)…….
定義對(duì)象就需要對(duì)類(lèi)進(jìn)行實(shí)例化。形如:類(lèi)名對(duì)象名

        類(lèi)是一個(gè)抽象,它不占任何內(nèi)存,只有當(dāng)其實(shí)例化成為對(duì)象之后,才會(huì)給其分配空間。
        計(jì)算機(jī)中就是用對(duì)象來(lái)描述大千世界的事物。對(duì)象之間通過(guò)消息建立聯(lián)系,借助函數(shù)完成各種各樣的功能。
簡(jiǎn)單的說(shuō),這就是對(duì)象和類(lèi)。

下面通過(guò)實(shí)例理解

【2-1】定義一個(gè)日C++類(lèi)和對(duì)象期類(lèi)date,該類(lèi)對(duì)象存放一個(gè)日期,可以提供的操作有:取日期值,取年份,提取月份,提取日期以及設(shè)計(jì)日期值。
【分析】這個(gè)程序需要先定義一個(gè)類(lèi)類(lèi)型,這個(gè)類(lèi)的數(shù)據(jù)成員有year,month,day,并且將其設(shè)計(jì)為private訪問(wèn)權(quán)限。還需要有5個(gè)成員函數(shù),分別為:

void getdate();          //取日期值,格式為“year-month-day”
int getyear();          //取年份
int getmonth();         //取月份
int getday();          //取日期
void setdate(int y,int m,int d);    //設(shè)置日期值
程序代碼如下:
#include <iostream>
using namespace std;
class date
{
public:
 void getdate();
 int getyear();
 int getmonth();
 int getday();
 void setdate(int y,int m,int d);
private:
 int year,month,day;
};
int date::getyear(){ return year; }
int date::getmonth(){ return month; }
int date::getday(){ return day; }
void date::getdate()
{ cout<<"today is:"<<year<<"-"<<month<<"-"<<day<<endl; }
void date::setdate(int y,int m,int d)
{ year=y; month=m; day=d;  }
int main()
{
 date d;
 d.setdate(2011,2,1);
 cout<<"year="<<d.getyear()<<endl;
 cout<<"month="<<d.getmonth()<<endl;
 cout<<"day="<<d.getday()<<endl;
 d.getdate();
 return 0;
}

【總結(jié)】這是一個(gè)最簡(jiǎn)單的類(lèi)程序,但其中也存在不少問(wèn)題。比如,如果沒(méi)有setdate()函數(shù),就無(wú)法對(duì)對(duì)象賦初值,而且必須按照特定的格式對(duì)對(duì)象進(jìn)行設(shè)置初值。這個(gè)問(wèn)題就應(yīng)該采用構(gòu)造函數(shù)來(lái)進(jìn)行對(duì)象初始化。
【2-2】對(duì)例【2-1】進(jìn)行改進(jìn),要求使用構(gòu)造函數(shù)進(jìn)行對(duì)象初始化,并且格式要不一致。
【分析】這個(gè)例子需要使用構(gòu)造函數(shù),并且要用到構(gòu)造函數(shù)重載,使用默認(rèn)參數(shù)值的構(gòu)造函數(shù)和拷貝構(gòu)造函數(shù)。
程序代碼如下:

#include <iostream>
using namespace std;
class date
{
public:
 date(int y=0,int m=0,int d=0)
 { year=y; month=m; day=d; }
 date(date &d)
 { year=d.year; month=d.month; day=d.day; }
 void getdate()
 { cout<<"today is:"<<year<<"-"<<month<<"-"<<day<<endl; }
 int getyear() { return year; }
 int getmonth() { return month; }
 int getday() { return day; }
private:
 int year,month,day;
};

int main()
{
 date d1(2011,2,1),d2,d3(d1);
 d1.getdate();
 d2.getdate();
 d3.getdate();
 return 0;
}

【總結(jié)】程序中的對(duì)象d1有完整的實(shí)參表,則調(diào)用構(gòu)造函數(shù)來(lái)進(jìn)行對(duì)象初始化;對(duì)象d2沒(méi)有實(shí)參表,系統(tǒng)同樣自動(dòng)調(diào)用構(gòu)造函數(shù)進(jìn)行對(duì)象初始化,只不過(guò)形參的值采用默認(rèn)參數(shù)值進(jìn)行初始化。對(duì)于對(duì)象d3,則采用拷貝構(gòu)造函數(shù)進(jìn)行初始化。
【2-3】輸入數(shù)據(jù)到數(shù)組內(nèi)求和、最大值、最小值與平均值后輸出,將成員函數(shù)定義在類(lèi)外。
【分析】這個(gè)程序時(shí)對(duì)C語(yǔ)言中所學(xué)內(nèi)容的一個(gè)總結(jié),是從面向過(guò)程到面向?qū)ο蟮目缭?。這個(gè)類(lèi)的數(shù)據(jù)成員應(yīng)該包括數(shù)組。成員函數(shù)應(yīng)該有數(shù)組輸入函數(shù)、數(shù)組輸出函數(shù)、求和函數(shù)、最大值函數(shù)、最小值函數(shù)和求平均值函數(shù)。
程序代碼如下:

#include <iostream>
using namespace std;
#define N 10
class array
{
public:
 void input();
 void output();
 int max();
 int min();
 int sum();
 float average();
private:
 int a[N],maxnumber,minnumber,sumnumber;
 float avenumber;
};
void array::input()
{
 int i=0;
 cout<<"Please input "<<N<<" numbers:"<<endl;
 for(i=0;i<N;i++)
 {
 cout<<"a["<<i<<"]=";
 cin>>a[i];
 }
}
void array::output()
{
 int i=0;
 cout<<"array a is:"<<endl;
 for(i=0;i<N;i++)
 cout<<a[i]<<" ";
 cout<<endl;
}
int array::max()
{
 int i;
 maxnumber=a[0];
 for(i=1;i<N;i++)
 if(maxnumber<a[i])
  maxnumber=a[i];
 return maxnumber;
}
int array::min()
{
 int i;
 minnumber=a[0];
 for(i=1;i<N;i++)
 if(minnumber>a[i])
  minnumber=a[i];
 return minnumber;
}
int array::sum()
{
 int i;
 sumnumber=a[0];
 for(i=1;i<N;i++)
 sumnumber+=a[i];
 return sumnumber;
}
float array::average()
{
 float ave=static_cast<float>(sumnumber/N);
 return ave;
}
int main()
{
 array a;
 a.input();
 a.output();
 cout<<"The max number is "<<a.max()<<endl;
 cout<<"The min number is "<<a.min()<<endl;
 cout<<"The sum number is "<<a.sum()<<endl;
 cout<<"The average number is"<<a.average()<<endl;
  return 0;
}

【總結(jié)】從上面的程序可以看出,類(lèi)array里面包括對(duì)數(shù)組的各種操作,包括求和,求最大值,求最小值以及求平均值等。
【2-4】設(shè)計(jì)一個(gè)表示貓的類(lèi),包括貓的顏色、體重、年齡等數(shù)據(jù),具有設(shè)置貓的顏色,修改和顯示貓的體重、年齡等操作。
【分析】設(shè)計(jì)貓類(lèi)的類(lèi)名為Cat,此類(lèi)有3個(gè)數(shù)據(jù)成員,顏色用string類(lèi)表示,可以存放漢字,體重用實(shí)數(shù)類(lèi)型表示,年齡用整數(shù)型表示,為了保護(hù)數(shù)據(jù)的安全性,3個(gè)數(shù)據(jù)成員全部為私有性。對(duì)貓的屬性數(shù)據(jù)的設(shè)置和修改,全部為公有函數(shù)。
程序代碼如下:

#include <iostream>
#include <string>
using namespace std;
class Cat
{
public:
 Cat(string c="red",float w=1,int a=1);
 string get_color();
 float get_weight();
 int get_age();
 void display();
private:
 string color;
 float weight;
 int age;
};
Cat::Cat(string c,float w,int a)
{
 color=c;
 weight=w;
 age=a;
}
string Cat::get_color()
{
 return color;
}
float Cat::get_weight()
{
 return weight;
}
int Cat::get_age()
{
 return age;
}
void Cat::display()
{
 cout<<"The color of this cat is "<<get_color()<<endl;
 cout<<"The weight of this cat is "<<get_weight()<<endl;
 cout<<"The age of this cat is "<<get_age()<<endl;
}
int main()
{
 Cat c1,c2("yellow",1,2);
 cout<<"c1 is:"<<endl;
 c1.display();
 cout<<"c2 is:"<<endl;
 c2.display();
 return 0;
}

【總結(jié)】從上面的程序可以看出,構(gòu)造函數(shù)可以用類(lèi)對(duì)對(duì)象進(jìn)行初始化,并且構(gòu)造函數(shù)可以進(jìn)行重載。

希望本文可以對(duì)大家學(xué)習(xí)c++編程語(yǔ)言有所幫助,也希望大家可以繼續(xù)關(guān)注!

相關(guān)文章

最新評(píng)論