C/C++教程

C++toturial RunNoob

本文主要是介绍C++toturial RunNoob,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

C++教程|菜鸟教程

reference:https://www.runoob.com/cplusplus/cpp-tutorial.html

个人觉得这个toturial是一个非常适合新手的文档,可惜少了些练习。

Notes

C++基本使用

C++包括面向对象开发的四大特性:封装、抽象、继承、多态。

数据类型大小:一般char一个字节八位,int四个字节,float四个字节,double八个字节。

内存地址的问题:在栈内存中变量的生长方向是向下的,就是后分配的地址小;在堆内存中,变量的生长方向是向上的就是后分配的地址大;

作用域的问题:一般有三个地方可以定义变量:在函数或一个代码块内部声明的变量,称为局部变量;在函数参数的定义中声明的变量,称为形式参数;在所有函数外部声明的变量,称为全局变量。全局变量定义时,系统会自动进行初始化(0或’/0’),局部变量系统不会进行自动初始化。

常量:整数常量、浮点常量、布尔常量、字符常量(\t水平制表符,相当于按tab,四个空格)、字符串常量

  • 整数常量:整数常量也可以带一个后缀,后缀是 U 和 L 的组合,U 表示无符号整数(unsigned),L 表示长整数(long)。后缀可以是大写,也可以是小写,U 和 L 的顺序任意。:

杂项运算符:

  • sizeof:sizeof运算符返回变量的类型大小;
  • .(点)和 ->(箭头):成员运算符用于引用类、结构和共用体的成员;
  • Cast:强制转换运算符把一种数据类型转换为另一种数据类型;
  • &: 返回变量的地址。例如 &a; 将给出变量的实际地址(地址应该是一串16进制的数字)
  • *:指针运算符:指向一个变量,例如,*var; 将指向变量 var

(实参和形参)当调用函数时,有三种向函数传递参数的方式:

  • 传值调用:默认C++中使用传值调用来传递函数,在这种情况下,修改函数内的形式参数对实际参数没有影响。
  • 指针调用:该方法把参数的地址赋值给形式参数。在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。
  • 引用调用:该方法把参数的引用赋值给形式参数。在函数内,该引用用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。

Lambda 函数:匿名函数的支持,本质上与函数声明非常类似,把函数看作对象;

C++中的指针:指针是一个变量,内存位置的直接地址,int *ip; 一个整型的指针,所有的指针都是一样的,都是一个代表内存地址的长的十六进制数,int是指ip的数据类型。一般指针使用流程:定义一个指针变量、把变量地址赋值给指针、访问指针变量中可用地址的值。

C++中一些常用的头文件:

  • <ctime>:时间和日期相关的头文件;
  • <cmath>:提供数学运算;
  • <vector>:向量类,一个封装了动态大小数组的顺序容器;
  • <string>:字符串处理

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()函数是新定义出来的;
  • 派生类可以访问基类中所有的非私有成员;一个派生类继承了所有的基类方法,但是基类的构造函数、析构函数、拷贝构造函数、重载运算符、友元函数不继承;
  • 多继承:即一个子类可以有多个父类,它继承了多个父类的特性

重载运算符和重载函数:相同名称的声明,但是它们的参数列表和定义(实现)不相同;编译器比较选择最适合的定义;

多态:多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数;

  • 虚函数:虚函数 是在基类中使用关键字 virtual 声明的函数,

C++高级教程

异常处理:异常处理涉及到三个关键字:try、catch、throw

动态内存:这里牵扯到堆栈的问题;

  • 栈:在函数内部声明的所有变量都将占用栈内存;
  • 堆:这是程序中未使用的内存,在程序运行时可用于动态分配内存;
  • new :为给定类型的变量在运行时分配堆内的内存,这会返回所分配的空间地址; delete 运算符,删除之前由 new 运算符分配的内存;

命名空间:namespace,命名空间的定义:namespace namespace_name { // 代码声明 },命名空间也可以嵌套;

预处理器:所有的预处理器指令都是以井号(#)开头,这里包括:#include、#define、#if、#else、#line etc;

这篇关于C++toturial RunNoob的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!