reference:https://www.runoob.com/cplusplus/cpp-tutorial.html
个人觉得这个toturial是一个非常适合新手的文档,可惜少了些练习。
C++包括面向对象开发的四大特性:封装、抽象、继承、多态。
数据类型大小:一般char一个字节八位,int四个字节,float四个字节,double八个字节。
内存地址的问题:在栈内存中变量的生长方向是向下的,就是后分配的地址小;在堆内存中,变量的生长方向是向上的就是后分配的地址大;
作用域的问题:一般有三个地方可以定义变量:在函数或一个代码块内部声明的变量,称为局部变量;在函数参数的定义中声明的变量,称为形式参数;在所有函数外部声明的变量,称为全局变量。全局变量定义时,系统会自动进行初始化(0或’/0’),局部变量系统不会进行自动初始化。
常量:整数常量、浮点常量、布尔常量、字符常量(\t水平制表符,相当于按tab,四个空格)、字符串常量
杂项运算符:
(实参和形参)当调用函数时,有三种向函数传递参数的方式:
Lambda 函数:匿名函数的支持,本质上与函数声明非常类似,把函数看作对象;
C++中的指针:指针是一个变量,内存位置的直接地址,int *ip;
一个整型的指针,所有的指针都是一样的,都是一个代表内存地址的长的十六进制数,int是指ip的数据类型。一般指针使用流程:定义一个指针变量、把变量地址赋值给指针、访问指针变量中可用地址的值。
C++中一些常用的头文件:
类与对象:
类包括访问修饰符(private、public、protected)、变量、方法;
定义了Box类之后,Box Box1; 声明Box1对象,其类型为Box;
访问数据成员:类的对象的公共public数据成员可以使用直接成员访问运算符 . 来访问;私有的成员和受保护的成员不能使用直接成员访问运算符 (.) 来直接访问;成员和类的默认访问修饰符是 private;私有 private成员变量或函数在类的外部是不可访问的,甚至是不可查看的。只有类和友元函数可以访问私有成员;**protected(受保护)**成员变量或函数与私有成员十分相似,但有一点不同,protected(受保护)成员在派生类(即子类)中是可访问的;
类的成员函数可以直接再类中定义,也可以在类内部声明成员函数,然后在类的外部使用::定义,如:double Box::getVolume(void)
,
类的构造函数:类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行;构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值;默认构造函数是无参的,但也可以带有参数;
类的析构函数:一种特殊的成员函数,它会在每次删除所创建的对象时执行;析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀;析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源;
类中的静态成员:静态成员:可以使用 static 关键字来把类成员定义为静态的,当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本;静态成员函数:智能访问静态成员;
继承:继承允许我们依据另一个类来定义一个类,达到重用代码功能和提高执行效率的效果;
class Dog : public Animal { // bark() 函数 };
Dog类继承了Animal类,bark()函数是新定义出来的;重载运算符和重载函数:相同名称的声明,但是它们的参数列表和定义(实现)不相同;编译器比较选择最适合的定义;
多态:多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数;
异常处理:异常处理涉及到三个关键字:try、catch、throw
动态内存:这里牵扯到堆栈的问题;
命名空间:namespace,命名空间的定义:namespace namespace_name { // 代码声明 }
,命名空间也可以嵌套;
预处理器:所有的预处理器指令都是以井号(#)开头,这里包括:#include、#define、#if、#else、#line etc;