初探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