《算法笔记》之基础C/C++进阶
这一次主要讲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重构函数等,在这里不说明了,主要为了了解基本知识,进行数据结构与算法的学习。
加油!
《算法笔记》之基础C/C++进阶的更多相关文章
- 「算法笔记」快速数论变换(NTT)
一.简介 前置知识:多项式乘法与 FFT. FFT 涉及大量 double 类型数据操作和 \(\sin,\cos\) 运算,会产生误差.快速数论变换(Number Theoretic Transfo ...
- 《算法笔记》之基础C/C++入门
开始进行算法笔记的学习,在此纪录下来,同时作为自己日后复习资料. 1.基本语法 #include <iostream> using namespace std; int main(){ c ...
- 线段树学习笔记(基础&进阶)(一) | P3372 【模板】线段树 1 题解
什么是线段树 线段树是一棵二叉树,每个结点存储需维护的信息,一般用于处理区间最值.区间和等问题. 线段树的用处 对编号连续的一些点进行修改或者统计操作,修改和统计的复杂度都是 O(log n). 基础 ...
- 算法笔记——C/C++语言基础篇(已完结)
开始系统学习算法,希望自己能够坚持下去,期间会把常用到的算法写进此博客,便于以后复习,同时希望能够给初学者提供一定的帮助,手敲难免存在错误,欢迎评论指正,共同学习.博客也可能会引用别人写的代码,如有引 ...
- C#可扩展编程之MEF学习笔记(五):MEF高级进阶
好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...
- 学习Java 以及对几大基本排序算法(对算法笔记书的研究)的一些学习总结(Java对算法的实现持续更新中)
Java排序一,冒泡排序! 刚刚开始学习Java,但是比较有兴趣研究算法.最近看了一本算法笔记,刚开始只是打算随便看看,但是发现这本书非常不错,尤其是对排序算法,以及哈希函数的一些解释,让我非常的感兴 ...
- (转)深度学习word2vec笔记之基础篇
深度学习word2vec笔记之基础篇 声明: 1)该博文是多位博主以及多位文档资料的主人所无私奉献的论文资料整理的.具体引用的资料请看参考文献.具体的版本声明也参考原文献 2)本文仅供学术交流,非商用 ...
- 深度学习word2vec笔记之基础篇
作者为falao_beiliu. 作者:杨超链接:http://www.zhihu.com/question/21661274/answer/19331979来源:知乎著作权归作者所有.商业转载请联系 ...
- 算法笔记_023:拓扑排序(Java)
目录 1 问题描述 2 解决方案 2.1 基于减治法实现 2.2 基于深度优先查找实现 1 问题描述 给定一个有向图,求取此图的拓扑排序序列. 那么,何为拓扑排序? 定义:将有向图中的顶点以线性方式进 ...
- 算法笔记_018:旅行商问题(Java)
目录 1 问题描述 2 解决方案 2.1 蛮力法 2.2 减治法 2.2.1 Johson-Trotter算法 2.2.2 基于字典序的算法 1 问题描述 何为旅行商问题?按照非专业的说法,这个问 ...
随机推荐
- php-max_execution_time
有时候我们需要跑一个脚本,比如执行几十万个请求.如果你使用浏览器,请求服务器.这时就会出现执行中断,因为超时了.我们可以通过下面的方式: 修改php.ini配置文件 max_execution_tim ...
- 解决某些手机RadioGroup中的RadioButton不居中(右移)问题
最近一直在忙一个项目,页面的基本框架类似于QQ那样,有底部导航栏的,遂采用的是RadioButton来实现的.本来一直在我的模拟器上测试,页面展示是没啥问题的,效果图如下: 可是,坑爹的事今天却发生了 ...
- 【原生JS】图片预加载之无序预加载
图片预加载之无序预加载 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset= ...
- js(一) 三大事件 实现注册验证
ps:小声比比,为什么一周多没更,因为js真的好难啊. 上一周做了一整周的jsp+sevlet+mysql做了一个MVC模式的最基本的新闻系统源码会有空搞出来的 好累 好多的. 三大事件 (鼠标事件. ...
- H3C 查看RIP的debugging信息
- java throw
自行抛出一个异常对象,抛出异常类的对象: 若throw抛出的是Runtime异常: 程序可以显示使用try...catch来捕获并处理,也可以不管,直接交给方法调用者处理: 若throw抛出Check ...
- php_sphinx安装使用
Sphinx的简介: Sphinx是一个独立的全文索引引擎,意图为其他应用提供高速.低空间 占用.搜索结果高相关度的全文搜索功能.Sphinx可以非常容易的与 SQL数据库和脚本语言集成.内置MySQ ...
- React 简书
create-react-app jianshu yarn add styled-components -D 利用js写css样式 样式会更高效 https://github.com ...
- ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(15)之前台网站页面
源码下载地址:http://www.yealuo.com/Sccnn/Detail?KeyValue=c891ffae-7441-4afb-9a75-c5fe000e3d1c 本项目主要是一个素材的分 ...
- the password has expired
Oracle提示错误消息ORA-28001: the password has expired,是由于Oracle11G的新特性所致, Oracle11G创建用户时缺省密码过期限制是180天(即6个月 ...