这一次主要讲C++不同于C的地方:类。

1.类的定义

  定义一个类,本质上是定义一个数据类型的蓝图。这实际上并没有定义任何数据,但它定义了类的名称意味着什么,也就是说,它定义了类的对象包括了什么,以及可以在这个对象上执行哪些操作。类定义是以关键字 class 开头,后跟类的名称。类的主体是包含在一对花括号中。类定义后必须跟着一个分号或一个声明列表。

class Box
{
public:
double length; // 盒子的长度
double breadth; // 盒子的宽度
double height; // 盒子的高度
};

  如何访问?

Box Box1;          // 声明 Box1,类型为 Box
Box Box2; // 声明 Box2,类型为 Box

  这时候Box1和Box2都是Box类型的数据结构,相当于int类型,double类型,只不过Box类型是我们自己定义的类型。

  int、double、char这些类型属于语言本身的一部分,我们称之为基本类型,基本类型不可被更改,也不可被创造,更不可被消灭,任何一个程序都是有基本类型搭建起来的,比如,我们想要用一个类型来表示一个学生,那么我们可以char*,来表示他的名字,用unsigned int来表示他的学号,用double来表示他的成绩等等,而这个表示学生信息的类型是由我们自定义而来,所以我们称之为自定义类型,即上述的Box类型。

2.C与C++的自定义类型

  C之自定义类型:结构体

typedef struct UserType{
int a;
double b;
long long c;
}* __LPUSERTYPE;

  C++的类:

class Point{
public:
double x;
double y;
};

  这两者之间有何区别呢,C++可以认为是带类的C语言,因此class感觉在大多数情况下好似等于struct,这样应该更便于理解。

  class : C++ 关键字,表示接下来要定义一个类型啦。

  Point : 类型名,总是跟在class的后面,指明类型名是什么,class 和 类型名的中间还可以有其他的东西,比如我们在写com的时候使用的uuid,比如我们要导出一个类时候使用的__declspec(dllexport)等。

  { } : class 的代码段。

  在 C++ 里面,class 是一句完整的C++语句,C++语句都是以";"结束,所以在"}"后面需要要用表示结束的";"号,否则你会遇到各种你预想不到的错误,当然,该语法对于C语言的struct也同样实用。那么class和struct又有什么区别呢?在C语言里面,struct里面所定义的数据类型都是可以直接访问的,简单点说C语言的struct的数据是共有的,同时C语言里的struct里面不可以有成员函数,当然这个限制在C++中已经被摒弃,在C++中,struct和class的唯一区别就是默认权限的区别,在C语言中没有权限的概念,但C++作为面向对象的编程语言,所以自然提供了权限的概念,以便于数据的封装,只是struct的默认权限是public,而class的默认权限是private,public顾名思义是公共的,private是私有的,当然除了public和private外还存在一个权限:protected,private和protected所限制的数据都是外部不能够访问的,那么他们的区别是什么呢?private是纯粹的对数据进行封装,protected不但对数据进行封装,还对继承留下一个后门。如你们所见,这里我们使用的plubic权限,public后面必须跟有":"号,所以在public下面的接口或者数据都是外部能够直接访问得到的。那么在C++中,我们什么时候使用struct什么时候使用class呢?这里没有什么标准规范来限制,所以简单点说就是凡是使用struct的地方都可以使用class来替换,反之亦然,但是,通常于C++来说有个不成文的规矩,那就是如果仅仅只是简单的定义一个组合类型的话我们使用struct,否则我们都应该使用class。

  

  还有构造函数、赋值、operate重构函数等,在这里不说明了,主要为了了解基本知识,进行数据结构与算法的学习。

  加油!

最新文章

  1. Ubuntu 64位下搭建ADT的种种问题
  2. LINUX内核笔记:自旋锁
  3. spring 集成 Hibernate4.3.X org.hibernate.service.jta.platform.spi.JtaPlatform异常
  4. JS弹出窗口代码大全(详细整理)
  5. 3.3 使用Code First数据库迁移
  6. 如何在Hadoop的MapReduce程序中处理JSON文件
  7. linux top命令VIRT,RES,SHR,DATA的含义
  8. 过滤textarea
  9. tar打包和解压命令
  10. BootStrap Progressbar 实现大文件上传的进度条
  11. 导出页面文档(只在IE8下测试过)
  12. WPF: 针对Windows 8优化菜单栏和工具栏
  13. npm install fetchmatedata慢的解决办法
  14. Fabric单节点安装备忘
  15. Linux系统调用:进程的终止
  16. 网络编程——I/O复用
  17. 关于发邮件报错535 Error:authentication failed解决方法
  18. 【Scheme】cons的过程性实现
  19. Android学习之——实现圆角Button
  20. php之 常用的 流程管理

热门文章

  1. ipykernel_launcher.py: error: unrecognized arguments: -f /Users/apple/Library/Jupyter/runtime/kernel
  2. 为你的 SuperSocket 启用动态语言
  3. 如何查看linux中的ssh端口开启状态
  4. SpringData Jpa、Hibernate、Jpa 三者之间的关系
  5. MySQL高级配置
  6. CentOS7.0下安装FTP服务的方法
  7. dell装系统
  8. 【codeforces 766D】Mahmoud and a Dictionary
  9. win10 uwp 使用 Azure DevOps 自动构建
  10. 程序员必备神器(FastStoneCapture)