C++⼊门知识点总结——基本语法
C++ 是⼀种静态类型的、编译式的、通⽤的、⼤⼩写敏感的、不规则的编程语⾔,⽀持过程化编程、⾯向对象编程和。
1.⾯向对象程序设计:
C++ 完全⽀持⾯向对象,包括⾯向对象开发的四⼤特性:
封装
抽象
继承
多态
C++标准库的组成:
核⼼语⾔,提供了所有构件块,包括变量、数据类型和常量等;
C++ 标准库,提供了⼤量的函数,⽤于操作⽂件、字符串等;
标准模板库(STL),提供了⼤量的⽅法,⽤于操作数据结构等。
结构体数组不能作为参数传递给函数
C++ 程序可以定义为对象的集合,这些对象通过调⽤彼此的⽅法进⾏交互:
对象:对象具有状态和⾏为;
类:类可以定义为描述对象⾏为/状态的模板/蓝图;
⽅法:从基本上说,⼀个⽅法表⽰⼀种⾏为。⼀个类可以包含多个⽅法。可以在⽅法中写⼊逻辑、操作数据以及执⾏所有的动作;
即时变量:每个对象都有其独特的即时变量。对象的状态是由这些即时变量的值创建的。
2.C++基本语法:
C++数据类型:布尔(bool)/字符型(char)/整型(int)/浮点型(float)/双浮点型(double)/⽆类型(void)/宽字符型(wchar_t);
⼀些基本类型可以使⽤⼀个或多个类型修饰符进⾏修饰:signed/unsigned/short/long;
typedef声明:可以使⽤ typedef 为⼀个已有的类型取⼀个新的名字;
typedef type newname;
枚举类型:枚举类型(enumeration)是C++中的⼀种派⽣数据类型,它是由⽤户定义的若⼲枚举常量的集合。
1enum MYCOLOR{
2    BLUE,
3    GREE
4}color;
C++变量的声明:当使⽤多个⽂件且只在其中⼀个⽂件中定义变量时(定义变量的⽂件在程序连接时是可⽤的),使⽤ extern 关键字在任何地⽅声明⼀个变量。
1// 变量声明
2extern int a, b;
变量的作⽤域:分为全局变量/局部变量/形式参数。
常量:使⽤#define 预处理器/使⽤ const 关键字。
1#include <iostream>
2#define ONE  2
3int main() {
4    std::cout << "helloWorld" << sizeof(char);
5    const int FRIST = 1;
6    return 0;
7}
类型限定符:
const:const 类型的对象在程序执⾏期间不能被修改改变;
volatile:修饰符 volatile 告诉编译器不需要优化volatile声明的变量,让程序可以直接从内存中读取变量。对于⼀般的变量编译器会对变量进⾏优化,将内存中的变量值放在寄存器中以加快读写效率;
restrict:由 restrict 修饰的指针是唯⼀⼀种访问它所指向的对象的⽅式。只有 C99 增加了新的类型限定符 restrict。
存储类:存储类定义 C++ 程序中变量/函数的范围(可见性)和⽣命周期。
auto存储类:auto关键字⽤于两种情况:声明变量时根据初始化表达式⾃动推断该变量的类型、声明函数时函数返回值的占位符。
register存储类:⽤于定义存储在寄存器中⽽不是 RAM 中的局部变量。这意味着变量的最⼤尺⼨等于寄存器的⼤⼩(通常是⼀个词),且不能对它应⽤⼀元的 '&' 运算符(因为它没有内存位置)。
static存储类:指⽰编译器在程序的⽣命周期内保持局部变量的存在,⽽不需要在每次它进⼊和离开作⽤域时进⾏创建和销毁。因此,使⽤ static 修饰局部变量可以在函数调⽤之间保持局部变量的值,static 修饰符也可以应⽤于全局变量。当 static 修饰全局变量时,会使变量的作⽤域限制在声明它的⽂件内。
extern存储类:⽤于提供⼀个全局变量的引⽤,全局变量对所有的程序⽂件都是可见的。当使⽤ 'extern' 时,对于⽆法初始化的变量,会把变量名指向⼀个之前定义过的存储位置。
mutable存储类:仅适⽤于类的对象,它允许对象的成员替代常量。
thread_local存储类:声明的变量仅可在它在其上创建的线程上访问。 变量在创建线程时创建,并在销毁线程时销毁。 每个线程都有其⾃⼰的变量副本。
C++函数:函数是⼀组⼀起执⾏⼀个任务的语句。每个 C++ 程序都⾄少有⼀个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。
返回类型:⼀个函数可以返回⼀个值。不需要返回关键字void;
函数名称:这是函数的实际名称,函数名和参数列表构成函数签名;
参数:参数就像是占位符。当函数被调⽤时,向参数传递⼀个值,这个值被称为实际参数。参数列表包括函数参数的类型、顺序、数量。参数是可选的,也就是说,函数可能不包含参数;
函数主体:函数主体包含⼀组定义函数执⾏任务的语句。
函数声明:会告诉编译器函数名称及如何调⽤函数。函数的实际主体可以单独定义。
调⽤函数:当程序调⽤函数时,程序控制权会转移给被调⽤的函数。被调⽤的函数执⾏已定义的任务,当函数的返回语句被执⾏时,或到达函数的结束括号时,会把程序控制权交还给主程序。
函数参数:如果函数要使⽤参数,则必须声明接受参数值的变量,这些变量称为函数的形式参数。形式参数就像函数内的其他局部变量,在进⼊函数时被创建,退出函数时被销毁。
参数的传递⽅式:
1. 传值调⽤:该⽅法把参数的实际值赋值给函数的形式参数。在这种情况下,修改函数内的形式参数对实际参数没有影响。
2. 指针调⽤:该⽅法把参数的地址赋值给形式参数。在函数内,该地址⽤于访问调⽤中要⽤到的实际参数。这意味着,修改形式参
数会影响实际参数。
3. 引⽤调⽤(引⽤存储地址):该⽅法把参数的引⽤赋值给形式参数。在函数内,该引⽤⽤于访问调⽤中要⽤到的实际参数。这意
味着,修改形式参数会影响实际参数。
Lambda函数与表达式:Lambda 表达式把函数看作对象。Lambda 表达式可以像对象⼀样使⽤,⽐如可以将它们赋给变量和作为参数传递,还可以像函数⼀样对其求值。Lambda 表达式本质上与函数声明⾮常类似。
C++数组:存储⼀个固定⼤⼩的相同类型元素的顺序集合。数组是⽤来存储⼀系列数据,但它往往被认为是⼀系列相同类型的变量。
声明数组:需要指定元素的类型和元素的数量;
初始化数组:可以逐个初始化数组,也可以使⽤⼀个初始化语句;
访问数组元素:数组元素可以通过数组名称加索引进⾏访问。元素的索引是放在⽅括号内,跟在数组名称的后边;
多维数组:C++ ⽀持多维数组。多维数组最简单的形式是⼆维数组。
指向数组的指针:把第⼀个元素的地址存储在 p 中,就可以使⽤ *p、*(p+1)、*(p+2) 等来访问数组元素
1double *p;
2double balance[10];
3p = balance;
传递数组给函数:可以通过指定不带索引的数组名来传递⼀个指向数组的指针,传数组给⼀个函数,数组类型⾃动转换为指针类型,因⽽传的实际是地址。
从函数返回数组:C++ 不允许返回⼀个完整的数组作为函数的参数。但是,您可以通过指定不带索引的数组名来返回⼀个指向数组的指针。
C++字符串:C 风格的字符串起源于 C 语⾔,并在 C++ 中继续得到⽀持。字符串实际上是使⽤ null 字符 '\0' 终⽌的⼀维字符数组。因此,⼀个以 null 结尾的字符串,包含了组成字符串的字符。C++中string类。
C++指针:
每⼀个变量都有⼀个内存位置,每⼀个内存位置都定义了可使⽤连字号(&)运算符访问的地址,它表⽰了在内存中的⼀个地址。指针是⼀个变量,其值为另⼀个变量的地址,即,内存位置的直接地址。就像其他变量或常量⼀样,您必须在使⽤指针存储其他变量地址之前,对其进⾏声明。
指针的使⽤:定义⼀个指针变量、把变量地址赋值给指针、访问指针变量中可⽤地址的值。
1  int  var = 20;  // 实际变量的声明
2  int  *ip;        // 指针变量的声明
3  ip = &var;      // 在指针变量中存储 var 的地址
4
5  cout << "Value of var variable: ";
6  cout << var << endl;
7
8  // 输出在指针变量中存储的地址
9  cout << "Address stored in ip variable: ";
10  cout << ip << endl;
11
12  // 访问指针中地址的值
13  cout << "Value of *ip variable: ";
14  cout << *ip << endl;
NULL指针:在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋⼀个 NULL 值是⼀个良好的编程习惯。赋为 NULL 值的指针被称为空指针。
int  *ptr = NULL;
指针的算术运算:指针是⼀个⽤数值表⽰的地址。因此,可以对指针执⾏算术运算。
1ptr++;//递增⼀个指针
2ptr--; //递减⼀个指针
3
4const int MAX = 3;
5int  var[MAX] = {10, 100, 200};
6int  *ptr1;
7ptr1 <= &var[MAX - 1]; //指针可以⽤关系运算符进⾏⽐较,如 ==、< 和 >
指针与数组:⼀个指向数组开头的指针,可以通过使⽤指针的算术运算或数组索引来访问数组;
指针数组:⼀组存储同⼀类型指针的数组
1  int  var[MAX] = {10, 100, 200};
2  int  *ptr[MAX];
3
4  for (int i = 0; i < MAX; i++)
5  {
6      ptr[i] = &var[i]; // 赋值为整数的地址
7  }
8  for (int i = 0; i < MAX; i++)
9  {
10      cout << "Value of var[" << i << "] = ";
11      cout << *ptr[i] << endl;
12  }
指向指针的指针(如⼆级指针):指向指针的指针是⼀种多级间接寻址的形式,或者说是⼀个指针链。通常,⼀个指针包含⼀个变量的地址。当定义⼀个指向指针的指针时,第⼀个指针包含了第⼆个指针的地址,第⼆个指针指向包含实际值的位置。
1    int  var;
2    int  *ptr;
3    int  **pptr;
4
5    var = 3000;
6
7    // 获取 var 的地址
8    ptr = &var;
9
10    // 使⽤运算符 & 获取 ptr 的地址
11    pptr = &ptr;
12
13    // 使⽤ pptr 获取值
14    cout << "var 值为 :" << var << endl;
15    cout << "*ptr 值为:" << *ptr << endl;
16    cout << "**pptr 值为:" << **pptr << endl;
传递指针给函数:传递指针给函数,只需要简单地声明函数参数为指针类型即可。
从函数返回指针:必须声明⼀个返回指针的函数。
C++引⽤:引⽤变量是⼀个别名,也就是说,它是某个已存在变量的另⼀个名字。⼀旦把引⽤初始化为某个变量,就可以使⽤该引⽤名称或变量名称来指向变量。
引⽤和指针:不存在空引⽤,引⽤必须连接到⼀块合法的内存;⼀旦引⽤被初始化为对象就不能指向到另⼀个对象,指针可以在任何时候指向到另⼀个对象;引⽤必须在创建时被初始化,指针可以在任何时候被初始化。
1  // 声明简单的变量
2  int    i;
3  double d;
4
5  // 声明引⽤变量
6  int&    r = i;
7  double& s = d;
C++数据结构:C/C++ 数组允许定义可存储相同类型数据项的变量,但是结构是 C++ 中另⼀种⽤户⾃定义的可⽤的数据类型,它允许您存储不同类型的数据项。
定义结构:为了定义结构,必须使⽤struct语句。struct语句定义了⼀个包含多个成员的新的数据类型。
1struct Books
2{
3  char  title[50];
4  char  author[50];
5  char  subject[100];
6  int  book_id;
7} book;
访问结构成员:为了访问结构的成员,我们使⽤成员访问运算符(.)。成员访问运算符是结构变量名称和我们要访问的结构成员之间的⼀个句号。
结构体作为参数传递:把结构作为函数参数,传参⽅式与其他类型的变量或指针类似。
指向结构的指针:
定义指向结构的指针
struct Books *struct_pointer;
存储变量地址:
struct_pointer = &Book1;
使⽤指针访问结构的成员:
struct_pointer->title;
结构体实例:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。