初探C(面向过程)与C++(面向对象)的比较
来源:互联网 发布:baby假怀孕 知乎 编辑:程序博客网 时间:2024/06/03 05:21
在C语言中,“数据”和“数据处理”是分开来声明的,也就是说语言本身并没有支持“数据和函数”之间的关联性,这样的程序方法称为程序性的,也就是面向结构的。它们由一组“分布在各个功能为导向的函数中“的算法所驱动,它们处理的是共同的外部数据。(摘自:深度探索C++对象模型)
按照一般入门的人的理解,就有了下面的例子:
bool print(char name[20], int hight, int age)
{
printf("people:\n");
printf("name:%s\n", name);
printf("hight:%dcm\tage:%dyear\n", hight, age);
return true;
}
int main()
{
char people1[10] = "angle";
int hight = 180, age = 300;
print(people1, hight, age);
system("PAUSE");
return 0;
}
再来个书上的小改后的例子:
#include <stdio.h>
typedef struct point3d
{
float x;
float y;
float z;
}Point3d;
void Point3d_print(const Point3d *pd)
{
printf("(%g, %g, %g)\n", pd->x, pd->y, pd->z);
}
int main()
{
Point3d point;
point.x = point.y = point.z = 1;
Point3d_print(&point);
system("PAUSE");
return 0;
}
而在C++中,数据和函数可以封装起来,形成一个整体(抽象数据类型),即class。
先上个小改后的书上的例子:
#include <iostream>
class Point3d
{
public :
Point3d(float x = 0.0, float y = 0.0, float z =0.0)//默认构造函数,有默认参数
: _x(x), _y(y), _z(z)//初始化列表
{
}
//常成员函数,用于常对象的调用
float x() const {return _x;}
float y() const {return _y;}
float z() const {return _z;}
//重载上面的常成员函数,用于被一般对象调用
float x() {return _x;}
float y() {return _y;}
float z() {return _z;}
void x(float xval){_x = xval;}
private:
float _x;
float _y;
float _z;
};
//重载<< 操作符
inline std::ostream& operator << (std::ostream &os, const Point3d &pt)
{
return os << "(" << pt.x() << ","
<< pt.y() << "," << pt.z() << ")";
}
int main()
{
Point3d point(1.1, 2.2, 3.3);
std::cout << point ;//调用上面重载版本的操作符
std::cout << std::endl;
system("PAUSE");
return 0;
}
通过class ,我们就可以把”数据“和”处理数据的操作“声明在一起,并且通过public和private等访问修饰符封装class里面的内容。可以稍微从这里窥探一下面向过程和面向对象的区别。
0 0
- 初探C(面向过程)与C++(面向对象)的比较
- 小朋友学C++(2):面向过程与面向对象
- 面向对象与面向过程的比较
- 面向对象与面向过程的比较
- 面向对象与面向过程的比较
- 面向对象与面向过程的比较
- c++-面向对象与面向过程
- 比较好一些的面向对象(C++)编程试题
- 面向过程(c语言)与面向对象(oc,c++,c#)的区别,oc初级知识扫盲
- 面向对象(OO)开发与面向过程(OP)开发的比较
- 面向对象与面向过程比较
- 面向对象与面向过程思想比较
- 面向对象与面向过程的简单比较
- 面向过程方法与面向对象方法的比较
- 面向对象与面向过程的简单比较
- 面向过程与面向对象方法的比较
- 面向过程与面向对象方法的比较
- 面向对象与面向过程的编程思想比较
- 有趣的21
- 喜获面试金卡
- BZOJ 1821 JSOI 2010 Group 部落划分 Group Kruskal
- JAVA 对List 中的对象排序
- hdu2059 龟兔赛跑 (dp)
- 初探C(面向过程)与C++(面向对象)的比较
- hdoj1008
- 继递归递推求斐波那契后的另一种奇妙方法---矩阵乘法+快速幂运算
- POJ 2739 素数打表-----水题
- MapReduce应用开发 简单筛选日志
- 敌兵布阵
- 获取指定文件夹的文件路径
- Struts2_Spring4_Hibernate4框架整合
- 如何在eclipse中添加JAR程序包