怎样理解c++中的类和对象?山东
1个回答
展开全部
面向对象是一种编程的方式..
就如同你思考问题的方式一样,是一种规则,方法..
好比 C语言的面向过程一样,它的着中点在于问题解决的过程,先干什么,接着干什么,最后干什么..比较明显的过程式,汇编更是面向对象编程的鼻祖..所以,它们很适合编写,像操作系统,嵌入式等这些与硬件亲近,且基本上不需要对程序进行较大修改的程序,用过程式就比较高效了.
而面向对象呢,它就不同于面向对象了,它的着重点在于,怎样表示程序中的对象,这样的程序很适合编写一些像游戏,ERP,等等这样的应用性软件.
举个例子..要写一段程序模拟大自然创造世界的程序:
如果,是过程式的编写方式,首先,创造宇宙,然后从宇宙的某个点开始,创造星系,将全部星系创造完毕,星系创造完毕,又从某个星系,开始创造该星系所有的子星系,完成后创造该星系中的其他子星系,将所有星系中的所有子星系全部创建完成之后,就开始在从整个宇宙中的某个星系中的子星系的某个星球开始,建立完整的生态体系,用地球做比喻,首先,建立细菌系,然后将细菌系分裂成动物,植物系列,动物系列,进行几何式分裂,形成几亿种生命形态..依次为宇宙中的每个星球建立生态体系,完毕之后,宇宙的过程式创造就完毕了..这种方式有个明显的不足的地方就是,当你在整个宇宙,创造完毕之后要加入一个新的星系,那对与程序员来说那将是灾难性的,而且,可扩展性极差..
再看看面向对象:
首先为宇宙中的基本对象建模,宇宙这个结构中半包含的成员
class 宇宙
{
class* 大星系;
class 宇宙真空空间;
public:
//宇宙能进行的动作
宇宙();
宇宙(宇宙& a); //复制宇宙..
void operator=(宇宙& a); //复制宇宙.
~宇宙(); //自动销毁宇宙..
void 增加星系(unsigned int 新增星系编号);
void 销毁星系(unsigned int 已有星系编号);
...
...
... //等等操作
};
class 银河系:public 大星系
{
};
class 太阳系:public 银河系
{
class 地球;
class 火星;
...
};
class 地球
{
class 动物;
class 植物;
class 地球的状态;
};
class 地球的状态
{
class 陆地;
class 海洋;
...
};
class 陆地
{
class 亚洲;
class 欧洲;
...
}
class 亚洲
{
class 中国;
class 印度;
class 蒙古;
...
};
class 中国
{
class 省区[31];
}
class 省区
{
class 市区;
...
};
class 市区;
{
string 省名;
int 人口;
double 面积;
...
}
将宇宙中所有这些对象建模之后,只需生成一个宇宙对象,咋们的宇宙不就生成了..而且你要加入新的星系,或者毁灭某个星系不就轻而易举,或者要在宇宙某个地方复制个地球,那还会有什么难呢?
但并不是说面向对象的编程方式就能完全没有过程式编程,那是不可能,好比,你把车子的所有部分造好了,你不组装起来,它又怎么可能开得起来呢,其实C语言中同样有面向对象,struct 就是C语言的对象组织方式,只不过再C++中它得到了飞升..
这两种编程的方式也没有 谁强谁弱的说法,如果,用Java去编写操作系统,无异于 用诸葛亮去单条吕布..反之,用汇编去编写网络游戏,无异与让张飞去考取状元,术业有专攻..
◥
就如同你思考问题的方式一样,是一种规则,方法..
好比 C语言的面向过程一样,它的着中点在于问题解决的过程,先干什么,接着干什么,最后干什么..比较明显的过程式,汇编更是面向对象编程的鼻祖..所以,它们很适合编写,像操作系统,嵌入式等这些与硬件亲近,且基本上不需要对程序进行较大修改的程序,用过程式就比较高效了.
而面向对象呢,它就不同于面向对象了,它的着重点在于,怎样表示程序中的对象,这样的程序很适合编写一些像游戏,ERP,等等这样的应用性软件.
举个例子..要写一段程序模拟大自然创造世界的程序:
如果,是过程式的编写方式,首先,创造宇宙,然后从宇宙的某个点开始,创造星系,将全部星系创造完毕,星系创造完毕,又从某个星系,开始创造该星系所有的子星系,完成后创造该星系中的其他子星系,将所有星系中的所有子星系全部创建完成之后,就开始在从整个宇宙中的某个星系中的子星系的某个星球开始,建立完整的生态体系,用地球做比喻,首先,建立细菌系,然后将细菌系分裂成动物,植物系列,动物系列,进行几何式分裂,形成几亿种生命形态..依次为宇宙中的每个星球建立生态体系,完毕之后,宇宙的过程式创造就完毕了..这种方式有个明显的不足的地方就是,当你在整个宇宙,创造完毕之后要加入一个新的星系,那对与程序员来说那将是灾难性的,而且,可扩展性极差..
再看看面向对象:
首先为宇宙中的基本对象建模,宇宙这个结构中半包含的成员
class 宇宙
{
class* 大星系;
class 宇宙真空空间;
public:
//宇宙能进行的动作
宇宙();
宇宙(宇宙& a); //复制宇宙..
void operator=(宇宙& a); //复制宇宙.
~宇宙(); //自动销毁宇宙..
void 增加星系(unsigned int 新增星系编号);
void 销毁星系(unsigned int 已有星系编号);
...
...
... //等等操作
};
class 银河系:public 大星系
{
};
class 太阳系:public 银河系
{
class 地球;
class 火星;
...
};
class 地球
{
class 动物;
class 植物;
class 地球的状态;
};
class 地球的状态
{
class 陆地;
class 海洋;
...
};
class 陆地
{
class 亚洲;
class 欧洲;
...
}
class 亚洲
{
class 中国;
class 印度;
class 蒙古;
...
};
class 中国
{
class 省区[31];
}
class 省区
{
class 市区;
...
};
class 市区;
{
string 省名;
int 人口;
double 面积;
...
}
将宇宙中所有这些对象建模之后,只需生成一个宇宙对象,咋们的宇宙不就生成了..而且你要加入新的星系,或者毁灭某个星系不就轻而易举,或者要在宇宙某个地方复制个地球,那还会有什么难呢?
但并不是说面向对象的编程方式就能完全没有过程式编程,那是不可能,好比,你把车子的所有部分造好了,你不组装起来,它又怎么可能开得起来呢,其实C语言中同样有面向对象,struct 就是C语言的对象组织方式,只不过再C++中它得到了飞升..
这两种编程的方式也没有 谁强谁弱的说法,如果,用Java去编写操作系统,无异于 用诸葛亮去单条吕布..反之,用汇编去编写网络游戏,无异与让张飞去考取状元,术业有专攻..
◥
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询