国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

c++的面向對象基礎 Day 2

2019-11-08 19:39:49
字體:
來源:轉載
供稿:網友

概述

c++不僅擴充了c面向過程的功能,而且增加了面向對象的功能,這就是c++成為能適應面向對象程序設計的現代大語言。從計算機的角度,一個對象應該包括兩個要素:一是數據,二是需要進行的操作。傳統的面向過程程序設計是圍繞功能進行的,用一個函數實現一個功能。所有的數據都是公用的,一個函數可以使用任意一組數據,而一組數據又能被多個函數所使用。面向對象程序設計采用新的思路,它面對的是一個個對象,所有的數據分別屬于不同的對象。面向對象的程序設計方法的一個重要的特點就是封裝性,把數據和操作代碼封裝在一個對象中。程序設計者的任務包括兩個方面:一是設計對象,即決定把哪些數據和操作代碼封裝在一個對象中,二是在此基礎上怎樣通知有關對象完成所需的任務。

類和對象

對象的類型為類,類代表了某一批對象的共性和特征。類是對象的抽象,而對象是類的具體實例。 class stud { int num; char name[10]; char sex; void display() { cout<<"num:"<<num<<endl; cout<<"name:"<<name<<endl; cout<<"sex:"<<sex<<endl; } }; stud stud1,stud2;

這就聲明了一個名為 stud的類。可以看到聲明類的方法是由聲明結構體類型的方法發展而來的。它除了包含數據部分以外,還包括了對這些數據的操作部分,也就是把數據和操作封裝在一起。display是一個函數,用來輸出本對象中學生的學號、姓名和性別。類除了具有封裝性外,還采用了信息隱蔽原則,使類的成員與外界的聯系減少到最低程度。但是還是需要有外界的接口,一般是把數據隱藏起來,而把成員函數作為對外界的接口。接著,就有了類的成員包括兩大類:一類是私有的;一類是公有的,還有一類是受保護的。

class stud { PRivate: int num; char name[10]; char sex; public: void display() { cout<<"num:"<<num<<endl; cout<<"name:"<<name<<endl; cout<<"sex:"<<sex<<endl; } }; stud stud1,stud2;

現在聲明了display函數是公用的,外界就可以調用該函數了。 介紹在面向對象程序設計中的幾個名詞,類中的成員函數稱為方法,方法是對數據的操作,一個方法對應一種操作。顯然只有被聲明為public的方法(成員函數)才能被對象外界所激活。外界是通過發消息來激活有關方法的。所謂消息,其實就是一個命令,由程序語句來實現的。例如想輸出對象stud1中的學生學號、姓名、性別等信息,可以在程序中寫

stud1.display();

這就是向對象發出的一個消息,通知它執行display方法。 三個概念:對象 、方法、消息

歸納以上對類型的聲明,可以得到其一般形式: class 類名 {private: 私有的數據和成員函數; public: 公用的數據和成員函數; };

構造函數和析構函數

1、構造函數 在建立一個對象時,常常需要作某些初始化的工作(例如對數據賦予初值),C++提供了一種特殊的成員函數–構造函數(constructor),這種函數與其他成員不同,不需要用戶發消息來激活它,而是在建立對象時自動執行,構造函數是由用戶定義的,它必須與類名同名,以便系統能識別它并把它作為構造函數。現在我們在前面聲明的類中加入構造函數。

class stud //聲明一個類,以class開頭{private: //私有的數據和成員函數 int num; char name[10]; char sex; //以上三行是數據成員 public: //公用的數據和成員函數 stud() //定義構造函數,函數名與類名相同 {num=10010' strcpy(name,"Wang_li"); sex='F';} //給數據賦初值void display() //這是成員函數{cout<<"num:"<<num<<endl; cout<<"name:"<<name<<endl; cout<<"sex:"<<sex<<endl;}};stud stud1; //在定義對象stud1時自動執行構造函數;

==注意:構造函數不需要用戶調用,而是在定義一個對象時系統自動執行,而且只能執行一次。構造函數一般聲明為public,無返回值,也不需要加void類型聲明。

#include<string.h>#include<iostream.h>void main(){ class stud { private: int num; char name[10]; char sex; public: stud() {num=10010; strcpy(name,"Wang_li"); sex='F';} void display() {cout<<"num:"<<num<<endl; cout<<"name:"<<name<<endl; cout<<"sex:"<<sex<<endl;} }; stud stud1; stud1.display(); //cout<<stud1.num;}

如果要建立兩個對象,分別對數據賦予初值,就不能這樣定義構造函數stud了,因為它會使兩個學生的初值相同,例如姓名都是Wangli。應該分別賦予不同的初值,可將構造函數修改如下:

stud(int n,char nam[],char s){num=n; strcpy(name,nam); sex=s;}

完整程序即為

#include<iostream.h>void main(){ class stud { private: int num; char name[10]; char sex; public: stud(int n,char nam[],char s)//定義構造函數,有形參 {num=n; strcpy(name,nam); sex=s; } void display() {cout<<"num:"<<num<<endl; cout<<"name:"<<name<<endl; cout<<"sex:"<<sex<<endl;} }; stud stud1(10010,"Wang_li",'f'),stud2(10011,"Zhang_fen",'m'); stud1.display(); stud2.display(); //cout<<stud1.num;}

用戶也可以不定義構造函數,編譯系統會自動生成一個構造函數,該函數沒有參數,不進行任何操作。

構造函數也可以重載,下面是兩個重載函數:

stud()//定義構造函數,無形參 {num=10010; strcpy(name,"Wang_li"); sex='f'; } stud(int n,char nam[],char s)//定義構造函數,有形參 {num=n; strcpy(name,nam); sex=s; }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 长白| 光山县| 毕节市| 姚安县| 岳阳市| 卢湾区| 长汀县| 弥勒县| 德安县| 平塘县| 澳门| 石城县| 阿克| 保定市| 洪江市| 河津市| 平和县| 旌德县| 聊城市| 东阳市| 莎车县| 利川市| 宜兰县| 唐河县| 甘谷县| 墨竹工卡县| 十堰市| 五家渠市| 安乡县| 贡嘎县| 新龙县| 同仁县| 清徐县| 舒兰市| 金门县| 江油市| 鄂尔多斯市| 毕节市| 卢龙县| 京山县| 新沂市|