分享
 
 
 

C++编程杂谈:面向对象

王朝c/c++·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

软件开发是一个极其复杂的过程,一段小的代码我们可以快速、准确的完成,但是当你面对的是一个庞大的软件系统的时候,你是否有不知所措的感觉呢?

在我们使用C的年代里面,编程思想是结构化的,你的C语言老师可能会不断的教导你怎样使用结构化的方法来完成一段程序,同时,你可能也知道在软件开发中的一个重要定律(Wirth定律):

程序 = 算法 + 数据结构

在结构化设计中人们通常是这样来看待这个定律的:

程序 =(算法) + (数据结构)

例如:(我仍然使用C++标准库来写下面的代码,方便和以后的代码对比)

#include

using namespace std ;

typedef struct Student

{

char strname[50]; //姓名

int math; //数学分数

int chinese; //语文

int total; //总分

}STUDENT;

void InitData(STUDENT* some)

{

//////////////////////////////////////

//初始化数据

some->strname[0] = '\0';

some->math = 0;

some->chinese = 0;

some->total = 0;

}

void InputData(STUDENT* some)

{

///////////////////////////////////////

//获取输入

cout<<"enter name"<>some->strname;

cout<<"enter math"<>some->math;

cout<<"enter chinese"<>some->chinese;

//////////////////////////////////////

//计算总分

some->total = some->math + some->chinese;

}

void PrintData(STUDENT some)

{

cout<<some.strname<<"'s total mark is:"<<some.total<<endl;

}

//上面的部分可以单独放在一个头和CPP中

main()

{

STUDENT someone;

InitData(&someone);

InputData(&someone);

PrintData(someone);

}

到目前为止,程序的划分变得相对简单了,团队的开发才成为可能。在面向对象中,所存在的Wirth定律与上面的结构非常类似:

对象 = (算法 + 数据结构)

程序 = 对象 + 对象

表面上似乎二者之间并没有太大的差别,但就是这个差别为我们带来了巨大的变革。

有这样一句话:“编程是在计算机中反映世界”,我觉得再贴切不过,面向对象(Object-Oriented)对这种说法的体现也是最优秀的,比如在前面的例子中,我们设计的数据结构是一个学生成绩的表现,而对数据结构的操作(函数)是分离的,虽然这些操作是针对这种数据结构而产生的。为了管理大量的数据,我们不得不小心翼翼地使用它们。

面向对象中一个重要的概念就是类(class)C++中是它。类和struct数据结构最大的不同就是提供了限制级别(可见性)的保护——我们先抛开复杂的继承与多态不谈。正是通过这种方式,我们可以对数据成员提供非常有效的保护,同时使数据结构更符合现实行为。

在面向对象的概念中,前面的数据结构表示如下:

#include

using namespace std;

class Student

{

private:

//属性

char strname[50]; //姓名

int math; //数学分数

int chinese; //语文

int total; //总分

public:

//方法

char* getname(){ return strname; };

int getmath(){ return math; };

int getchinese(){ return chinese; };

int gettotal(){ return total; };

Student();

void InputData();

void PrintData();

};

Student::Student()

{

//////////////////////////////////////

//初始化数据

strname[0] = '\0';

math = 0;

chinese = 0;

total = 0;

}

void Student::InputData()

{

///////////////////////////////////////

//获取输入

cout<<"enter name"<>strname;

cout<<"enter math"<>math;

cout<<"enter chinese"<>chinese;

//////////////////////////////////////

//计算总分

total = math + chinese;

}

void Student::PrintData()

{

cout<<strname<<"'s total mark is:"<<total<<endl;

}

int main()

{

Student someone;

someone.InputData();

someone.PrintData();

}

我们先不去关心类的实现细节,现在对比一下main函数中的调用过程,每种方法和相应的数据结构联系在了一起,对外部的调用来说,我们不需要去关心数据结构和相应算法的关系,因为他们已经关联在了一起。也许这个例子不够说明问题,也许我的说明含糊不清,但是你想象一下:如果我们对一个物体,比如狗来建模,我们需要确定其属性(颜色、大小)和行为(跑、叫),我们肯定希望这些都与狗这个模型关联在一起:

Class dog

(属性)

Color

Size

(行为)

Run

yelp

如果是结构话的:

Struct dog

Color

Size

(依赖关系)

Run(dog somedog) yelp(dog somedog)

显然后面的结构比较复杂,更不要说缺乏有效的成员属性保护。另外一个面向对象的强大就是继承与多态,下一篇我们再来讨论。

我希望我前面的表达足够的清楚,面向对象不是这样一篇文章可以描述的清楚的,我这里只是描述了一个发展过程的片面。我希望它能成为一个引子,能够为初学者提供一些帮助。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有