C++入门总结

本文全面介绍了C++编程的基础知识,涵盖了编译运行、数据类型、变量声明与定义、作用域、常量、运算符、循环、判断、函数、数字运算、数组、字符串、指针、引用、日期和时间、输入输出流、以及数据结构等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编译运行:g++编译-f指定名称,./文件名,运行

注释:/*~*/注释, /* * */多行注释中间行行首加*,  //后全注释

数据类型:基本数据类型,int(整型)、bool(布尔型)、char(字符型)、float(浮点型)、double(双浮点型)、void(无类                      型)、wchar_t(宽字符型)。

                  其他数据类型:占用内存大小(sizeof),存储范围

                  typedef:typedef type newname为已有类型定义新名字

                  enum枚举类型:enum 枚举名{标识符,标识符} 枚举变量;例:enum color{ red, yellow } c;

变量声明和定义:

                              声明:type name  定义:type name = 1;   声明即告诉电脑有这么个东西,但是不知道他在哪,他的大小啊形                                状啊,定义即都可知道。

                              extern关键字:声明一个已定义过的变量,使我在别的包、文件、代码块都可以应用他的定义量,互相之间要                                引用 

作用域:全局变量和局部变量,全局变量可以被自动初始化并赋予值,局部变量则不会。正确初始化变量是良好的习惯。

常量:

整数常量,可以是二、八、十、十六进制。U无符号型(unsigned),L长整数(long)

浮点常量,两种表示方法:3.1415或31415E-4。U无符号型(unsigned),f单精度32位(float),d双精度64位(double),l                      高双精度(long double)80位

布尔常量:true false,不只是代表1和0

字符常量:单引号,以L开头,为宽常量字符,L'x',必须存在wchar_t类型变量中。记常用转义字符。

字符串常量:双引号,包括普通字符、转义序列、通用字符

定义常量:#define预处理器定义宏常量,count前缀声明指定类型常量,后者优点较多。

 

运算符:

算数运算符:+ - * / %取余 ++自增 --自减

关系运算符:== != < > <= >=

逻辑运算符: &&  || !

位运算符:逐位执行操作,0110&&1001 = 0000

赋值运算符:= += -= %= *= /= >>= <<= &= ^= |=     c +=2 为 c = c + 2 ,皆为类似操作

杂项运算符:sizeof返回变量大小;条件运算符condition ?X:Y:condition为真执行X,否则Y;逗号运算符,:顺序执行一系列操作,逗号表达式的值是以逗号分隔开列表中的最后一个表达式的值;成员运算符.和->用于引用类、结构、共用体的成员;强制转换运算符Cast:强制转换数据类型,int(2.0002)=2;指针运算符&:返回变量地址,&a返回a的实际地址;指针运算符*:*a,将指针指向变量var

运算符优先级:算数>关系>逻辑>赋值

 

循环:

循环类型:while、for、do ...while

循环控制语句:break结束loop或switch、continue跳过主体剩余部分重新开始测试、goto不建议使用

 

判断:

语句if else if else、switch;a?b:c条件运算符

 

函数:return_type function_name( parameter list ) { body of the function };也可以先声明后定义;

参数:形式参数和实际参数,三种调用方法:传值调用:只改变函数里的值、指针调用:实际参数地址复制给形式参数,改变原实际参数的值;引用调用:将实际参数的引用复制给实际函数,改变实际参数的值。

参数默认值:当设置了参数默认值,调用时未传参数使用默认,反之实参

lambda函数与表达式:把函数看作对象。

[capture](parameters)->return-type{body
[]      // 沒有定义任何变量。使用未定义变量会引发错误。
[x, &y] // x以传值方式传入(默认),y以引用方式传入。
[&]     // 任何被使用到的外部变量都隐式地以引用方式加以引用。
[=]     // 任何被使用到的外部变量都隐式地以传值方式加以引用。
[&, x]  // x显式地以传值方式加以引用。其余变量以引用方式加以引用。
[=, &z] // z显式地以引用方式加以引用。其余变量以传值方式加以引用。

[=]或[&]可以直接使用this指针,[]不能直接使用,需要显示的传入

[this]() { this->someFunc(); }();

 

数字运算:有丰富的内置函数库,<cmath>;生成随机数:srand()设置种子,rand()生成随机数

 

数组:type arrayName [ arraySize ];赋值进行初始化;arrayName[0]

多维数组:二维三维,int[3][4]三行四列

数组地址:double balance[50];*p值,p地址&balance[0]等同于balance

可传递数数组给函数,函数不能直接返回数组,可定义指针函数返回指针,再指针递增得到值

 

字符串:

序号函数 & 目的
1strcpy(s1, s2);
复制字符串 s2 到字符串 s1。
2strcat(s1, s2);
连接字符串 s2 到字符串 s1 的末尾。
3strlen(s1);
返回字符串 s1 的长度。
4strcmp(s1, s2);
如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回值小于 0;如果 s1>s2 则返回值大于 0。
5strchr(s1, ch);
返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
6strstr(s1, s2);
返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。

C++中还提供了string类类型

 

指针:

是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。

指针变量:*p,p为地址

空指针:为空指针赋值NULL,则地址为0,指向不可访问位置;若指针为空,则表示指针不指向任何东西。原函数中NULL的定义即为0.

指针的算术运算:递增递减,不是数值的变化,是位置的移动,地址大小上移动四个字节

指针和数组大多数情况下是可以互换的。但是数组名是指向首位地址的常量,不要试图改变他

指针数组:将指针存在数组中,这样可以方便调用,并且在同一数组中存储多种类型。也可以用其存储一个字符串列表。

指向指针的指针:多级间接寻址,指针链,用两个**在前,都是相同地址,可以理解为地址值的传递而已

传递指针给函数:可以当做函数的参数,参数也可以接受数组

函数返回指针:必须加*声明一个返回指针的函数,如存储数组之后可以直接返回数组首位置,很方便。

 

引用:

指针和引用的区别:

  • 不存在空引用。引用必须连接到一块合法的内存。
  • 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
  • 引用必须在创建时被初始化。指针可以在任何时间被初始化。

变量名是是变量的第一标签,可以想象为是变量的第二标签。

把引用作为参数:实现引用调用函数。

把引用作为返回值:类似指针函数,返回一个引用,并返回一个指向引用的隐式指针,函数就可以直接放在等式左边进行赋值,优点是在内存中不产生返回值的副本。

遵守规则:

  • (1)不能返回局部变量的引用。主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,程序会进入未知状态。
  •  (2)不能返回函数内部new分配的内存的引用。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它尴尬局面。例如,被函数返回的引用只是作为一 个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成memory leak。
  •  (3)可以返回类成员的引用,但最好是const。主要原因是当对象的属性是与某种业务规则(business rule)相关联的时候,其赋值常常与某些其它属性或者对象的状态有关,因此有必要将赋值操作封装在一个业务规则当中。如果其它对象可以获得该属性的非常 量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的完整性。

 

日期和时间:需使用C的<ctime>头文件。

有四种相关类型:

类型 clock_t、size_t 和 time_t 能够把系统时间和日期表示为某种整数。

结构类型 tm 把日期和时间以 C 结构的形式保存,tm结构:int tm_sec类似。

关于时间的重要函数

// 基于当前系统的当前日期/时间 time_t now = time(0); // 把 now 转换为字符串形式 char* dt = ctime(&now); // 把 now 转换为 tm 结构 tm *gmtm = gmtime(&now);(GMT时间)tm *ltm = localtime(&now);(本地时间);C中使用ltm->tm_year访问结构成员。

 

基本的输入与输出:

<iostream>该文件定义了 cin、cout、cerr 和 clog 对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。
<iomanip>该文件通过所谓的参数化的流操纵器(比如 setw 和 setprecision),来声明对执行标准化 I/O 有用的服务。
<fstream>

该文件为用户控制的文件处理声明服务。我们将在文件和流的相关章节讨论它的细节。

输入输出流可以使用函数来改变输出的方式。非常多。setiosflags、cout.self

 

数据结构:结构是用户自定义的数据类型,允许存储不同类型的数据量。

定义结构:使用struct定义

struct type_name { member_type1 member_name1; member_type2 member_name2; member_type3 member_name3; . . } object_names;结构体名称、数据、变量名。

使用.访问。结构可作为函数参数与指针类似。

指向结构的指针:struct Books *struct_pointer;

函数可以返回结构体:

struct test set( int a, float b, char c, double d )
{
    struct test t;
    t.i = a;
    t.f = b;
    t.c = c;
    t.d = d;
    return t;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值