C++粗略学习

前言

最近在准备考研复试,虽然学校说复试时可以使用python或者java进行编程,但是看了一些题目,还是觉得C or C++更为方便一些,同时也看到了王道推荐用C++(因为可以使用STL),因为有过C语言的基础和一些编程基础(我个人觉得写代码的规则基本都一样,打算着重看一下和我经常使用的python写法不同的地方)所以决定花个一两天的时间粗略的把C++看一下,把基础的东西和STL学一下,对付一下复试。


开始学习

C++简介(内容来自百度)

C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。C++ 被认为是一种中级语言,它综合了高级语言和低级语言的特点。C++ 完全支持面向对象的程序设计,包括面向对象开发的四大特性:封装、抽象、继承、多态,标准的 C++ 由三个重要部分组成:

  • 核心语言,提供了所有构件块,包括变量、数据类型和常量,等等
  • C++ 标准库,提供了大量的函数,用于操作文件、字符串等
  • 标准模板库(STL),提供了大量的方法,用于操作数据结构等(我需要重点注意的地方)

C++基本语法

  • 对象 - 对象具有状态和行为。例如:一只狗的状态 - 颜色、名称、品种,行为 - 摇动、叫唤、吃。对象是类的实例。
  • 类 -类可以定义为描述对象行为/状态的模板/蓝图。
  • 方法 -从基本上说,一个方法表示一种行为。一个类可以包含多个方法。可以在方法中写入逻辑、操作数据以及执行所有的动作。
  • 即时变量 -每个对象都有其独特的即时变量。对象的状态是由这些即时变量的值创建的。
    总的来说,以上的内容和C语言、C#有点像,C++更像是处于C和C#之间的一种语言。
    C++程序结构
#include <iostream>
using namespace std;
// main() 是程序开始执行的地方
int main()
{
   cout << "Hello World"; // 输出 Hello World
   return 0;
}

注:

  • 注意**using namespace std;**这个地方,这里是告诉编译器使用std命名空间,命名空间是C++中的一个相对新的概念。
  • 写C++和写C格式差不多,以";“结束一条语句,可以多条语句在一行,但是必须以”;"隔开,这和python不一样
  • 以{…}为代码块区域

C++数据类型

类型关键字
布尔型bool
字符型char
整型int
浮点型float
双浮点型double
无类型void
宽字符型wchar_t

其中,wchar_t:

typedef short int wchar_t;

所以 wchar_t 实际上的空间是和 short int 一样。
一些基本类型可以使用一个或多个类型修饰符进行修饰:

  • signed
  • unsigned
  • short
  • long

typedef声明
可以使用typedef为一个已有的类型取一个新的名字,例如:

typedef type newname; //用法
typedef int xxi; //给int取个新名字为xxi
xxi n;//创建整型变量n


枚举类型(我没有用过这个东西,这里的内容就直接复制百度)

枚举类型(enumeration)是C++中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。
如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型。所谓"枚举"是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。
创建枚举,需要使用关键字 enum。枚举类型的一般形式为:

enum 枚举名{
标识符[=整型常数],
标识符[=整型常数],

标识符[=整型常数]
} 枚举变量;

如果枚举没有初始化, 即省掉"=整型常数"时, 则从第一个标识符开始。
例如,下面的代码定义了一个颜色枚举,变量 c 的类型为 color。最后,c 被赋值为 “blue”。

enum color { red, green, blue } c;
c = blue;

默认情况下,第一个名称的值为 0,第二个名称的值为 1,第三个名称的值为 2,以此类推。但是,您也可以给名称赋予一个特殊的值,只需要添加一个初始值即可。例如,在下面的枚举中,green 的值为 5。

enum color { red, green=5, blue };

在这里,blue 的值为 6,因为默认情况下,每个名称都会比它前面一个名称大 1,但 red 的值依然为 0。


定义常量

在 C++ 中,有两种简单的定义常量的方式:

  • 使用 #define 预处理器。
  • 使用 const 关键字。

杂项运算符

运算符描述
sizeofsizeof 运算符返回变量的大小。例如,sizeof(a) 将返回 4,其中 a 是整数。
Condition ? X : Y条件运算符。如果 Condition 为真 ? 则值为 X : 否则值为 Y。
,逗号运算符会顺序执行一系列运算。整个逗号表达式的值是以逗号分隔的列表中的最后一个表达式的值。
.(点)和 ->(箭头)成员运算符用于引用类、结构和共用体的成员。
Cast强制转换运算符把一种数据类型转换为另一种数据类型。例如,int(2.2000) 将返回 2。
&指针运算符 & 返回变量的地址。例如 &a; 将给出变量的实际地址。
*指针运算符 * 指向一个变量。例如,*var; 将指向变量 var。

匿名函数

lambda函数在我平时使用中有用到,但是都是照葫芦画瓢,为了能用而用,所以到底是个什么并没有去了解过,发现c++里也有这个,按照我的理解,lambda可以利用以个表达式来表示一个函数,可以解决简单函数的函数名冲突,匿名函数也是一个函数对象,也可以把匿名函数赋值给以个变量,再利用变量来调用该函数。

Lambda 表达式具体形式如下:
capture->return-type{body}
例如:
[](int x, int y){ return x < y ; }
如果没有返回值可以表示为:
capture{body}
例如:
[]{ ++global_x; }
在一个更为复杂的例子中,返回类型可以被明确的指定如下:
[](int x, int y) -> int { int z = x + y; return z + x; }

在Lambda表达式内可以访问当前作用域的变量,这是Lambda表达式的闭包(Closure)行为。与JavaScript闭包不同,C++变量传递有传值和传引用的区别。可以通过前面的[]来指定:

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

另外一点需要注意。对于[=]或[&]的形式,lambda 表达式可以直接用this 指针。但是,对于[]的形式,如果要使用 this 指针,必须显式传入:

** this { this->someFunc();> }();**


字符串

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

C++数据结构

struct type_name{
menber_type1 menber1;
menber_type2 menber2;
…}object_names;

type_name 是结构体类型的名称,member_type1 member1 是标准的变量定义,比如 int i; 或者 float f; 或者其他有效的变量定义。在结构定义的末尾,最后一个分号之前,可以指定一个或多个结构变量,这是可选的。


指向结构的指针
可以定义指向结构的指针,方式与定义指向其他类型变量的指针相似,如下所示:

struct Books *struct_pointer;

可以在上述定义的指针变量中存储结构变量的地址。为了查找结构变量的地址,把 & 运算符放在结构名称的前面,如下所示:

struct_pointer = &Book1;

为了使用指向该结构的指针访问结构的成员,必须使用 -> 运算符,如下所示:

struct_pointer->title;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值