C++是对C的补充和扩充,C是C++的一个子集
C 面向过程 用函数解决问题
C++ 面向对象 用成员方法解决问题
C++在兼顾了C执行效率高的优点下提高了编程效率
C++之父——本贾尼.斯特劳斯特朗普
C++ 的文件后缀名可以是 .cpp .cxx .c++ .cc .C
编译C++程序 g++ 或 gcc -lstdc++

1.名字空间 namespace
(1)概念
C++对于变量、类型、函数在逻辑上的一个划分,一个名字空间相当于一个作用域
(2)使用
声明定义一个namespace
namespace name{

 };①using namespace name;②Using name :: 标识符③name :: 标识符
(3)匿名名字空间C++对于没有名字空间限制的标识符默认归入到匿名名字空间如果在程序中需要指明访问,可以用  ::标识符  来制定访问匿名名字空间标识符

2.C++的类型
(1)char short int long float double都与C一样
(2)结构体
①C : sizeof(空结构体)=0
②C++ : sizeof(空结构体)=1
③C++中,当struct类型定义后,声明或定义变量时,可以省略struct关键字
(3)联合
C++支持匿名联合,即不需要union name{};中的name
(4)枚举
①是一种独立的数据类型
②不能把整数变量或者整数数值赋值给枚举变量但可以把枚举变量赋值给整数变量
(5)布尔
C++中有bool类型,不再是0和1,非”零”即为真
“零”: 0 0.0 ‘\0’ NULL “”
(6)运算符别名
&& and
|| or
! not
[ <:
] :>
{ <%
} %>
&= and_eq
& bitand
| bitor
~ compl
!= not_eq
!= 0r_eq
^ xor
^= xor_eq
3.C++的函数
C++中函数没有隐式声明,在调用前必须先声明
C++函数中没有形参,不能传递实参
C语言中struct内不能声明函数,但C++中可以,声明的函数作为成员方法可以直接访问成员变量
(1)重载
同一作用域下,函数名相同,参数列表不同即构成重载
参数列表不同:
参数个数不同
参数类型不同
(2)缺省值
①在声明函数时参数可以设置默认值,调用函数时可传可不传
②缺省参数靠右原则
③当声明和实现分离时,缺省参数只能放在声明中,实现中不能带缺省参数
(3)哑元
①只有类型,没有形参名就叫哑元
②只关心参数类型,不关心参数的值
③用于在运算符重载中区分前+±-和后+±-
(4)内联函数 inline
①修饰一个函数,直接用函数的二进制指令替换调用指令
②运行效率高,生成的程序更大,一般简单的函数可以内联,复杂的没必要

4.动态内存
new/new[] delete/delete[] 都是操作符,不是函数,底层调用malloc/calloc
(1)申请和释放单个变量的动态内存
以int类型为例:
申请:
int* a=new int;
int* b=new int(10);
释放: delete a;
(2)申请数组形式的动态内存
以int为例:
申请:
int* a=new int[5];
int* a=new int[5]{1,2,3,4,5};
释放:
delete[] a;
(3)malloc与new的区别
①malloc是函数,new是操作符
②malloc不会调用构造函数,new会自动调用类构造函数
③malloc可以用于数组动态内存的申请,new不行,new[]才行
④malloc需要给定申请内存大小的字节数,new会根据类型自己计算
⑤malloc返回void*,new返回指定类型地址
⑥malloc失败返回NULL,new出错抛出异常
5.引用
int& b=a
(1)引用即变量别名,且必须初始化,引用变量定义后,引用变量和目标变量本质上是同一个变量
(2)引用变量一旦定义,就不能更改引用对象
(3)引用的意义
①用于函数传递参数(使用引用也可以在函数中更改实参的值)
②返回一个结果作为左值
③提高传参效率,节省内存
(4)引用与指针的区别:
①引用必须初始化,指针可以不初始化(野指针)
②引用目标不能为控,指针指向可以为空
③引用一旦定义,就不能改变引用目标,指针任何时候都可以修改指向目标
④可以声明指针的引用,但不能声明引用的指针
⑤可以声明指针的指针,但不能声明引用的引用
⑥可以声明指针数组,但不能声明引用数组
⑦可以声明数组的引用,也可以声明数组的指针
6.类型转换
(1)隐式类型转换
可以自动转换,不会有警告和错误
(2)强制类型转换(不建议使用)
目标变量=(目标类型)源对象
(3)显示类型转换
①静态类型转换 static_cast<目标类型>源对象
②去常类型转换 const_cast<目标类型>源对象
③重解释类型转换 reinterpret_cast<目标类型>源对象
④动态类型转换 dynamic_cast<目标类型>源对象
7.字符串
(1)C++中支持C风格的字符串
(2)C++中提供了string类型

8.面向对象编程
(1)类
class 类名{
成员属性;
成员方法;
};
(2)访问控制属性
①public 公开的,任何地方都能访问
②protected 保护的,只能在类或子类内部访问
③Private 私有的,只能在本类内部访问
(3)class与struct的区别
①class中默认访问控制属性是private
②struct中默认访问控制属性是public
(4)构造方法
用于实例化一个对象
A.构造方法没有返回值类型,也不能是void
B.构造方法名必须和类名一模一样
C.当一个类没有实现构造方法时,会默认提供一个无参构造方法,当程序运自己 有实现构造方法时,不提供无参构造方法
D.构造方法可以重载
(5)this
①每一个类成员方法中都隐含一个this指针
②this指针指向正在调用该方法的对象
(6)初始化列表
①在实现构造方法时,可以用一个初始化列表对成员属性进行初始化
②对于长属性成员和引用成员,不许在初始化列表中初始化
③初始化列表的执行顺序至于成员变量的声明顺序有关,与初始化列表的语句先后顺序无关
(7)常对象和常函数
①被const关键字修饰的成员属性和成员方法称为常对象和常函数
②常对象只能调用常函数,不能调用普通成员函数
③常函数和非常函数可以构成重载
④形参列表中引用和指针的常属性不同会构成重载,而普通变量会变成重定义
(8)mutable
①用于修饰成员属性
②在常函数中,不能修改普通成员属性,但可以修改被mutable修饰的成员属性
(9)static
①static修饰的属性称为类属性或静态属性
②静态属性需要在类外声明,且不能在初始化列表中初始化
类型 类名::静态属性=x;
③静态属性属于类,可以用 类名::静态属性 来访问,也能通过对象.静态属性访问
④静态属性属于类,所有对象共享一份

 ⑤static修饰的方法称为静态方法,因为没有隐含的this指针,不能直接访问成员属性,不能调用成员方法,但可以直接访问静态属性
(10)explicitclass A{A(B b){}};在任何一个类中,如果实现了单参构造函数  A(B b){}那么,B类型的对象都可以借助单参构造函数成为A类型的对象构造函数可以用explicit修饰   防止单参构造函数的隐式调用
(11)析构函数当一个对象消亡或者delete时,会调用析构函数如果一个对象在构造时new了动态内存,则需要手动实现析构函数
(12)拷贝构造①用一个已经存在的对象来构造一个心得同类型的对象②类名(const 类名& a){}③默认是按字节拷贝,新旧对象一模一样,实现的是浅拷贝④深拷贝:拷贝指针所指向内存地址中的数据,而不是拷贝指针的值本身
(13)拷贝赋值构造①如果没有实现拷贝复制构造,编译器会自动提供②默认是浅拷贝③需要实现深拷贝则需要自己实现,实际上是重载”=”运算符

9.string
C++里的string类型实际上是一个类,可以自己实现string类型
class string{
private:
char *s;
public:
string(const char *str)

超全面的C++知识点概括相关推荐

  1. java web视频_超全面的JavaWeb视频教程

    超全面的JavaWeb视频教程 此套JavaWeb视频为非常全面的教程,适合JavaWeb爱好者自学.课程循序渐进.深入浅出,涉及到所有的知识点.学会本套教程,你就可以完全掌握到JavaWeb开发精髓 ...

  2. 超全面的freemarker教程

    转载:http://demojava.iteye.com/blog/800204 以下内容全部是网上收集: FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由 ...

  3. ios底部栏设计规范_超全面的UI设计规范整理,你值得收藏!

    很多新人在开始做移动端UI设计的时候,往往对界面的一些尺寸规范不是十分清楚,很多时候都是凭借自己的感觉和经验去绘制界面,心里并没有一个清晰的概念,导致做出来的页面总是不那么尽如人意. 本文整理汇总了一 ...

  4. 超全面的Java全套教程分享_动力节点完整版视频教程

    各种各样的编程语言不断崛起,但唯有Java是牢牢占据着老大的位置,目前几乎90%以上的大中型互联网应用系统在服务器端开发首选Java. 因此,也是吸引了不少年轻人投入到Java的学习之中. 但不得不说 ...

  5. ui设计移动端字体适配_超全面的UI设计规范整理汇总(包含iPhone X适配)

    写在前面 很多新人在开始做移动端UI设计的时候,往往对界面的一些尺寸规范不是十分清楚,很多时候都是凭借自己的感觉和经验去绘制界面,心里并没有一个清晰的概念,导致做出来的页面总是不那么尽如人意.本文整理 ...

  6. 超全面的JavaWeb笔记day02CSSJavaScript

    1.CSS的简介 2.CSS概述和与HTML的结合方式(四种)(*******) 3.CSS的基本选择器(******) 4.CSS的扩展选择器(了解) 5.CSS的盒子模型(了解) 6.CSS的布局 ...

  7. android接口类命名规范_超全面的UI基础设计规范来啦,还不收藏 ~

     写在前面的话   很多刚入行的UI设计师开始接触移动端UI设计的时候,对于基础的界面尺寸规范可能会有一定的模糊认知,导致做出来的界面往往会感觉不是那么和谐,却也不知道怎么去完善和改进. 对于大多数的 ...

  8. 这应该是最全面的MySQL知识点总结啦

    书籍推荐 <SQL基础教程(第2版)> (入门级) <高性能MySQL : 第3版> (进阶) 常见问题总结 存储引擎 一些常用命令 查看MySQL提供的所有存储引擎 mysq ...

  9. 最全面的shiro知识点学习

    与spring集成 1.导入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns= ...

最新文章

  1. NB-IoT,你真是太让我失望了
  2. 安装 node_Mac下的Node.js安装教程
  3. ruby1.8.6 安装watir是出现问题记录
  4. Restore IP Addresses leetcode java
  5. Python 第三方模块之 imgaug (图像增强)
  6. promise的状态以及api介绍_2019年,盘点一些我出过的前端面试题以及对求职者的建议
  7. python接口测试框架django_开源~自研接口测试平台 Django2.0+Vue
  8. 【JSP开发】有关session的登录注销的一个小例子
  9. 《俄罗斯方块》正版授权手游开启预约:支持QQ、微信双平台
  10. 基于 PSO 算法解决 TSP 项目
  11. mysql开启 pscache_Druid连接池在mysql的场景PS Cache是否需要开启?
  12. python中继承和组合的区别_Py修行路 python基础 (十五)面向对象编程 继承 组合 接口和抽象类...
  13. 如何把R加到环境变量 Linux,如何设置R的环境变量以在RedHat Linux(RHEL6)上的Tomcat中使用...
  14. 重庆邮电大学c语言实验报告,重庆邮电大学c语言上机实验期末实验报告.doc
  15. 双系统装完只能u盘启动_U盘启动盘如何安装Win7+Win8双系统史上最详细教程
  16. shell编程三大神器之sed
  17. 蜂鸣器干扰通讯_蜂鸣器工作原理是什么,为什么需要接振荡的信号才能工作?...
  18. html语言黄色,HTML黄色欧美形式音频工作室网页模板代码
  19. shell(37) : java控制台运行打印颜色字体
  20. 网易云项目(Vue)

热门文章

  1. 使用蜜蜂剪辑工具怎么将文字内容转化成语音?
  2. 解决AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using local
  3. Cisco MSTP配置
  4. 【题库】上海市学校心理咨询师考试-普通心理学-考点解析 3.1 意识
  5. MyBatis Generator的使用和坑
  6. 学生管理系统(链表+数据库)学习小结
  7. Oracle 11g_数据导出与导入(14)
  8. vue +vant 车牌号输入
  9. python flask实战订餐系统微信小程序-61申请免费https证书
  10. 删除`BST`的节点