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
- C++ Q&A(一)C++与C的区别
- C Q&A
- [C] int *p[4]与int (*q)[4]的区别
- c与c++的区别(一)
- C与C++的区别(一)
- sed命令的a、c、q命令
- linux c compile Q&A
- 【C/C++】int *p[4]与int (*q)[4]的区别
- 彻底搞清 C/C++中a++与++a的区别
- 彻底搞清 C/C++中a++与++a的区别
- 彻底搞清 C/C++中a++与++a的区别
- C语言左值与右值的区别(C语言深度剖析读书笔记一)
- [c/c++]A a();与A a;
- Interview Q&A - 两个字符串整数相加返回和的字符串(C#)
- C和C++的区别(一)
- 后缀名C与c的区别
- GNU C 与 ANSI C的区别
- C与C++的区别
- lightoj 1037 - Agent 47 【状压dp】
- 面向对象高级——Object类、包装类以及匿名内部类
- (9)Java设计模式-外观模式(Facade)
- SOIL库加载纹理
- pip 升级包 技巧 一键升级
- C++ Q&A(一)C++与C的区别
- 《网络工程师》 Part3 广域通信网
- BZOJ 4515 SDOI2016 游戏
- excel排版大师:excel文件批量加水印
- 开源大数据分析引擎Impala实战 笔记
- 基于硬件模拟器的操作系统调试技术
- iOS NSArray 求两个数组的交集 两个数组去重
- Linux Command -- gawk
- iOS学习笔记24-不断进化的屏幕适配