C++ Q&A(一)C++与C的区别

来源:互联网 发布:达达数据 编辑:程序博客网 时间:2024/06/06 03:52

声明:Q&A系列的文章是我在平时自己遇到的或者看到的一些问题,本着再小的问题也需要有人解答的想法,将这些问题和答案整理出来。

欢迎和我讨论问题,同时也欢迎转载Q&A系列的文章。


在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里面的内容。可以稍微从这里窥探一下面向过程和面向对象的区别。

参考资料:《深度探索C++对象模型》

0 0
原创粉丝点击