程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++類和對象實例解析(二)

C++類和對象實例解析(二)

編輯:關於C++

C++類和對象實例解析(二)。本站提示廣大學習愛好者:(C++類和對象實例解析(二))文章只能為提供參考,不一定能成為您想要的結果。以下是C++類和對象實例解析(二)正文


C++既是面向對象也是面向進程的說話,在這裡就有一個主要的概念——類。
        何謂類?類是對對象的一種籠統,舉例來說:每個實其實在存在的人就是一個對象,人有許多配合的特點(一個頭,兩條腿,能走,能跑),這具有配合特點的人就成為一個類。類是一個籠統的名詞,每小我(即對象)是這個類的實例。
        對象間具有的配合特點是對象的屬性和行動。錄相機是一個對象,它的屬性是臨盆廠家、牌子、分量、色彩等等,它的行動就是它的功效,如錄相、放像、快進、發展等操作。
C++法式中,須要先界說一個類,形如:
  Class 類名
     {
        界說變量;
        ….
        界說函數
      }
在類體中時成員列表,包含數據和操作數據的函數,即數據成員、成員函數。這表現了類的封裝性和信息的隱藏性。
成員函數普通在類體中聲明,在類體外界說。
結構函數:對對象停止賦值
析構函數:在函數功效域停止時,釋放對象成員的空間。
內聯函數:為了節儉函數挪用的時光
完成各類功效函數…….
界說對象就須要對類停止實例化。形如:類名對象名

        類是一個籠統,它不占任何內存,只要當其實例化成為對象以後,才會給其分派空間。
        盤算機中就是用對象來描寫年夜千世界的事物。對象之間經由過程新聞樹立接洽,借助函數完成各類各樣的功效。
簡略的說,這就是對象和類。

上面經由過程實例懂得

【2-1】界說一個日C++類和對象期類date,該類對象寄存一個日期,可以供給的操作有:取日期值,取年份,提取月份,提取日期和設計日期值。
【剖析】這個法式須要先界說一個類類型,這個類的數據成員有year,month,day,而且將其設計為private拜訪權限。還須要有5個成員函數,分離為:

void getdate();          //取日期值,格局為“year-month-day”
int getyear();          //取年份
int getmonth();         //取月份
int getday();          //取日期
void setdate(int y,int m,int d);    //設置日期值
法式代碼以下:
#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;
}

【總結】這是一個最簡略的類法式,但個中也存在很多成績。好比,假如沒有setdate()函數,就沒法對對象賦初值,並且必需依照特定的格局對對象停止設置初值。這個成績就應當采取結構函數來停止對象初始化。
【2-2】對例【2-1】停止改良,請求應用結構函數停止對象初始化,而且格局要紛歧致。
【剖析】這個例子須要應用結構函數,而且要用到結構函數重載,應用默許參數值的結構函數和拷貝結構函數。
法式代碼以下:

#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;
}

【總結】法式中的對象d1有完全的實參表,則挪用結構函數來停止對象初始化;對象d2沒有實參表,體系異樣主動挪用結構函數停止對象初始化,只不外形參的值采取默許參數值停止初始化。關於對象d3,則采取拷貝結構函數停止初始化。
【2-3】輸出數據到數組內乞降、最年夜值、最小值與均勻值後輸入,將成員函數界說在類外。
【剖析】這個法式時對C說話中所學內容的一個總結,是從面向進程到面向對象的逾越。這個類的數據成員應當包含數組。成員函數應當稀有組輸出函數、數組輸入函數、乞降函數、最年夜值函數、最小值函數和求均勻值函數。
法式代碼以下:

#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;
}

【總結】從下面的法式可以看出,類array外面包含對數組的各類操作,包含乞降,求最年夜值,求最小值和求均勻值等。
【2-4】設計一個表現貓的類,包含貓的色彩、體重、年紀等數據,具有設置貓的色彩,修正和顯示貓的體重、年紀等操作。
【剖析】設計貓類的類名為Cat,此類有3個數據成員,色彩用string類表現,可以寄存漢字,體重用實數類型表現,年紀用整數型表現,為了掩護數據的平安性,3個數據成員全體為公有性。對貓的屬性數據的設置和修正,全體為私有函數。
法式代碼以下:

#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;
}

【總結】從下面的法式可以看出,結構函數可以用類對對象停止初始化,而且結構函數可以停止重載。

願望本文可以對年夜家進修c++編程說話有所贊助,也願望年夜家可以持續存眷!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved