C++基础笔记

C++基础笔记

DansRoh Lv4

基础部分

布尔bool 、字符型char 、整型int、浮点型float、双浮点型double、无类型void、宽字符型wchar_t
一些基本类型可以被类型类型修饰符所修饰

  • signed
  • unsigned
  • short
  • long

typedef声明–给类型取别名

typedef int feet;

feet num;

枚举类型

声明一个可选的类型名称和一组标识符,用来作为该类型的值

enum enum-name { list of names } var-list;

默认情况下,第一个名称的值为 0, 后面的+1

c++中的左值和右值

左值(lvalue):指向内存位置的表达式被称为左值(lvalue)表达式。左值可以出现在赋值号的左边或右边。

右值(rvalue):术语右值(rvalue)指的是存储在内存中某些地址的数值。右值是不能对其进行赋值的表达式,也就是说,右值可以出现在赋值号的右边,但不能出现在赋值号的左边。

局部变量和全局变量的初始化

当局部变量被定义时,系统不会对其初始化,您必须自行对其初始化。定义全局变量时,系统会自动初始化,具体初始化的值请自行百度

定义常量

  1. 使用 #define 预处理器

  2. 使用 const 关键字

c++存储类

  1. auto – 所有局部变量默认的存储类

  2. register – 用于定义存储在寄存器中而不是 RAM 中的局部变量。

  3. static – 指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁.因此,使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。

  4. extern – 用于提供一个全局变量的引用,全局变量对所有的程序文件都是可见的。

  5. mutable – 仅适用于类的对象。它允许对象的成员替代常量。也就是说,mutable 成员可以通过 const 成员函数修改。

指针

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

声明方式:

int *ip //一个整形的指针

所有指针的值的实际数据类型,不管是整型、浮点型、字符型,还是其他的数据类型,都是一样的,都是一个代表内存地址的长的十六进制数。不同数据类型的指针之间唯一的不同是,指针所指向的变量或常量的数据类型不同。

相关概念

  • C++Null指针——C++ 支持空指针。NULL 指针是一个定义在标准库中的值为零的常量
  • C++指针的算术运算——可以对指针进行四种算术运算:++、–、+、-
  • C++指针vs数组——指针和数组之间有着密切的关系。
  • C++指针数组——可以定义用来存储指针的数组。
  • C++指向指针的指针——C++ 允许指向指针的指针。
  • C++传递指针给函数——通过引用或地址传递参数,使传递的参数在调用函数中被改变。
  • C++从函数返回指针——C++ 允许函数返回指针到局部变量、静态变量和动态内存分配。

C++引用

引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。

C++ 引用 vs 指针

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

C++ 中创建引用

1
2
3
4
5
int i = 17;
double d =23.5;

int& r = i; // r 是一个初始化为 i 的整型引用
double& s = d; // s 是一个初始化为 d 的 double 型引用

C++基本的输入输出

I/O库头文件

头文件 函数和描述
iostream 该文件定义了 cin、cout、cerrclog 对象,分别对应于标准输入流、标准输出流、非缓冲标准错误流和缓冲标准错误流。
iomanip 该文件通过所谓的参数化的流操纵器(比如 setwsetprecision),来声明对执行标准化 I/O 有用的服务。
fstream 该文件为用户控制的文件处理声明服务。我们将在文件和流的相关章节讨论它的细节。

C++数据结构

为了定义结构,您必须使用 struct 语句。struct 语句定义了一个包含多个成员的新的数据类型,struct 语句的格式如下:

1
2
3
4
5
6
struct Books{
char title[50];
char author[50];
char subject[100];
int book_id;
}book;

访问结构成员

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <cstring>

using namespace std;

struct Books{
char title[50];
char author[50];
char subject[100];
int book_id;
};

int main(){
struct Books Book1; // 声明 Book1,类型为 Book
struct Books Book2; // 声明 Book2,类型为 Book

// Book1 详述
strcpy( Book1.title, "Learn C++ Programming");
strcpy( Book1.author, "Chand Miyan");
strcpy( Book1.subject, "C++ Programming");
Book1.book_id = 6495407;

// Book2 详述
strcpy( Book2.title, "Telecom Billing");
strcpy( Book2.author, "Yakit Singha");
strcpy( Book2.subject, "Telecom");
Book2.book_id = 6495700;

// 输出 Book1 信息
cout << "Book 1 title : " << Book1.title <<endl;
cout << "Book 1 author : " << Book1.author <<endl;
cout << "Book 1 subject : " << Book1.subject <<endl;
cout << "Book 1 id : " << Book1.book_id <<endl;

// 输出 Book2 信息
cout << "Book 2 title : " << Book2.title <<endl;
cout << "Book 2 author : " << Book2.author <<endl;
cout << "Book 2 subject : " << Book2.subject <<endl;
cout << "Book 2 id : " << Book2.book_id <<endl;

return 0;
}

Tips: 使用typedef来简化数据结构的使用

C++面向对象

类的定义

1
2
3
4
5
6
7
8
class Box
{
public:
double length; // Length of a box
double breadth; // Breadth of a box
double height; // Height of a box
};
Box Box1; // 定义对象

派生类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>

using namespace std;

// 基类
class Shape
{
public:
void setWidth(int w)
{
width = w;
}
void setHeight(int h)
{
height = h;
}
protected:
int width;
int height;
};

// 派生类
class Rectangle: public Shape
{
public:
int getArea()
{
return (width * height);
}
};

int main(void)
{
Rectangle Rect;

Rect.setWidth(5);
Rect.setHeight(7);

// 输出对象的面积
cout << "Total area: " << Rect.getArea() << endl;

return 0;
}

一个派生类继承了所有的基类方法,但下列情况除外:

  • 基类的构造函数、析构函数和拷贝构造函数。
  • 基类的重载运算符。
  • 基类的友元函数。

多继承

多继承即一个子类可以有多个父类,它继承了多个父类的特性。

C++ 类可以从多个类继承成员,语法如下:

1
2
3
4
class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…
{
<派生类类体>
};

C++ 中的运算符重载

Box operator+(const Box&);

Box operator+(const Box&, const Box&);

C++接口(抽象类)

如果类中至少有一个函数被声明为纯虚函数,则这个类就是抽象类。

抽象类不能被用于实例化对象,它只能作为接口使用。

1
2
3
4
5
6
7
8
9
10
class Box
{
public:
// 纯虚函数
virtual double getVolume() = 0;
private:
double length; // 长度
double breadth; // 宽度
double height; // 高度
};
  • 标题: C++基础笔记
  • 作者: DansRoh
  • 创建于 : 2023-12-20 00:00:00
  • 更新于 : 2024-06-21 19:58:00
  • 链接: https://blog.shinri.me/2023/12/20/01_c++基础/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论