【C++】【期末考】【基本概念和语法】概括总结——期末速成

news2024/11/25 22:45:07

目录

1. C++简介

C++的历史与发展

C++的特点与优势

2. 基本语法

注释

数据类型与变量

常量

运算符

输入与输出

3. 控制结构

条件语句

循环语句

4. 函数

函数定义与声明

参数传递

返回值

函数重载

5. 数组与字符串

一维数组

多维数组

字符串处理

6. 指针

指针的定义与使用

指针运算

指针与数组

函数指针

7. 引用

引用的定义与用法

引用与指针的区别

8. 结构体与联合体

结构体定义与使用

联合体定义与使用

枚举类型

9. 类与对象

类的定义与成员

对象的创建与使用

构造函数与析构函数

类的继承

多态与虚函数

运算符重载

10. 模板

函数模板

类模板

11. STL(标准模板库)

容器

算法

迭代器

12. 文件操作

文件读写

文件流

13. 异常处理


1. C++简介

C++的历史与发展

C++是一种面向对象的编程语言,由Bjarne Stroustrup在20世纪80年代初开发。它是在C语言的基础上增加了面向对象的特性,从而既具有C语言的高效性,又提供了高级的编程抽象。C++已经成为许多系统级软件、游戏、嵌入式系统以及高性能计算应用程序的主要编程语言。

C++的特点与优势

  • 面向对象编程:支持类和对象、继承、多态和封装。
  • 高效性:C++编译后的程序运行速度很快,接近于C语言。
  • 灵活性:支持多范式编程,包括面向对象、泛型编程和过程式编程。
  • 丰富的库:拥有丰富的标准库(STL),提供了大量的容器和算法。

2. 基本语法

注释

C++支持单行注释和多行注释。

// 这是单行注释
/*
这是
多行
注释
*/

数据类型与变量

C++支持多种基本数据类型,包括整型(int)、字符型(char)、浮点型(float, double)等。

int a = 10;
char b = 'A';
float c = 3.14;

C++还支持布尔型(bool),用于表示真(true)或假(false)。

bool isTrue = true;

常量

常量可以使用const关键字定义,一旦定义不能改变。

const int MAX = 100;

在C++11及之后的版本中,可以使用constexpr关键字定义常量表达式。

constexpr int MIN = 1; // 常量表达式

 

运算符

C++提供了丰富的运算符,包括算术运算符、关系运算符、逻辑运算符等。

int a = 5 + 3; // 加法
bool b = (a > 3) && (a < 10); // 逻辑与

C++还支持位运算符,用于按位操作。

int x = 5; // 0101
int y = 3; // 0011
int z = x & y; // 0001,按位与运算

 

输入与输出

使用cin进行输入,使用cout进行输出。

int num;
std::cin >> num;
std::cout << "Number is " << num << std::endl;

还可以使用getline函数读取一整行输入。

std::string line;
std::getline(std::cin, line); // 读取一整行输入
std::cout << "Line is: " << line << std::endl;

 

3. 控制结构

条件语句

条件语句用于根据条件执行不同的代码段。

if (condition) {
    // statements
} else if (another_condition) {
    // statements
} else {
    // statements
}

switch (variable) {
    case value1:
        // statements
        break;
    case value2:
        // statements
        break;
    default:
        // statements
}

示例:根据用户输入的年龄判断是否成年。

int age;
std::cin >> age;
if (age >= 18) {
    std::cout << "You are an adult." << std::endl;
} else {
    std::cout << "You are not an adult." << std::endl;
}

 

循环语句

循环语句用于重复执行代码块。

for (int i = 0; i < 10; ++i) {
    // statements
}

while (condition) {
    // statements
}

do {
    // statements
} while (condition);

示例:打印从1到10的数字。 

for (int i = 1; i <= 10; ++i) {
    std::cout << i << std::endl;
}

4. 函数

函数定义与声明

函数是执行特定任务的代码块。

// 函数声明
int add(int a, int b);

// 函数定义
int add(int a, int b) {
    return a + b;
}

示例:定义一个函数计算两个数的乘积。

int multiply(int a, int b) {
    return a * b;
}

 

参数传递

参数传递可以通过值传递和引用传递。

void swap(int &a, int &b) {
    int temp = a;
    a = b;
    b = temp;
}

示例:通过引用传递数组元素。

void increment(int &num) {
    num++;
}

 

返回值

函数可以返回一个值,也可以返回多个值(通过指针或引用)。

int max(int a, int b) {
    return (a > b) ? a : b;
}

示例:返回两个数的较大值。

int getMax(int a, int b) {
    return (a > b) ? a : b;
}

 

函数重载

C++支持函数重载,即允许多个同名函数根据参数类型或数量的不同而存在。

int add(int a, int b) {
    return a + b;
}

double add(double a, double b) {
    return a + b;
}

示例:定义一个函数用于打印整数和一个用于打印浮点数。

void print(int num) {
    std::cout << "Integer: " << num << std::endl;
}

void print(double num) {
    std::cout << "Double: " << num << std::endl;
}

 

5. 数组与字符串

一维数组

一维数组用于存储相同类型的多个元素。

int arr[5] = {1, 2, 3, 4, 5};

示例:遍历数组并打印元素。

for (int i = 0; i < 5; ++i) {
    std::cout << arr[i] << std::endl;
}

 

多维数组

多维数组用于存储矩阵等结构。

int matrix[3][3] = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

示例:打印二维数组的元素。

for (int i = 0; i < 3; ++i) {
    for (int j = 0; j < 3; ++j) {
        std::cout << matrix[i][j] << " ";
    }
    std::cout << std::endl;
}

字符串处理

C++标准库提供了string类用于字符串处理。

#include <string>
std::string str = "Hello, World!";

示例:拼接两个字符串。

std::string str1 = "Hello";
std::string str2 = "World";
std::string result = str1 + ", " + str2 + "!";
std::cout << result << std::endl;

 

6. 指针

指针的定义与使用

指针用于存储变量的内存地址。

int a = 10;
int *p = &a;

示例:通过指针修改变量的值。

*p = 20;
std::cout << "a = " << a << std::endl; // 输出20

 

指针运算

指针可以进行算术运算。

p++; // 移动到下一个内存位置

示例:遍历数组的指针。

int arr[5] = {1, 2, 3, 4, 5};
int *p = arr;
for (int i = 0; i < 5; ++i) {
    std::cout << *(p + i) << std::endl;
}

 

指针与数组

指针可以用于遍历数组。

int arr[5] = {1, 2, 3, 4, 5};
int *p = arr;
for (int i = 0; i < 5; ++i) {
    std::cout << *(p + i) << std::endl;
}

示例:数组名实际上是指向第一个元素的指针。

int *p = arr; // 数组名arr是一个指针,指向第一个元素

 

函数指针

函数指针用于指向函数。

void print(int a) {
    std::cout << a << std::endl;
}

void (*funcPtr)(int) = print;
funcPtr(10);

示例:使用函数指针数组调用不同的函数。

void func1(int a) { std::cout << "Function 1: " << a << std::endl; }
void func2(int a) { std::cout << "Function 2: " << a << std::endl; }

void (*funcArray[2])(int) = {func1, func2};
funcArray ;
funcArray ;

 

7. 引用

引用的定义与用法

引用是变量的别名。

int a = 10;
int &ref = a;

示例:通过引用修改变量的值。

ref = 20;
std::cout << "a = " << a << std::endl; // 输出20

 

引用与指针的区别

引用必须在定义时初始化且不能更改引用对象,而指针可以改变指向。

int a = 10;
int b = 20;
int *p = &a;
p = &b; // 允许
int &ref = a;
// ref = b; // 错误

示例:使用引用作为函数参数。

void increment(int &num) {
    num++;
}
int value = 5;
increment(value);
std::cout << "value = " << value << std::endl; // 输出6

 

8. 结构体与联合体

结构体定义与使用

结构体用于定义新的数据类型,包含多个成员变量。

struct Person {
    std::string name;
    int age;
};

Person person = {"John", 30};

示例:访问结构体成员。

std::cout << "Name: " << person.name << std::endl;
std::cout << "Age: " << person.age << std::endl;

 

联合体定义与使用

联合体用于在相同的内存位置存储不同类型的数据。

union Data {
    int i;
    float f;
    char c;
};

Data data;
data.i = 10;

示例:访问联合体成员。

data.f = 3.14;
std::cout << "Float: " << data.f << std::endl;

 

枚举类型

枚举类型用于定义一组命名常量。

enum Color { RED, GREEN, BLUE };
Color color = RED;

示例:使用枚举类型。

if (color == RED) {
    std::cout << "The color is red." << std::endl;
}

 

9. 类与对象

类的定义与成员

类是面向对象编程的基本单元,包含成员变量和成员函数。

class Box {
public:
    int length;
    int width;
    int height;
};

示例:定义类的成员函数。

class Box {
public:
    int length;
    int width;
    int height;
    
    int volume() {
        return length * width * height;
    }
};

 

对象的创建与使用

对象是类的实例,通过对象可以访问类的成员。

Box box;
box.length = 10;

示例:通过对象调用成员函数。

Box box;
box.length = 10;
box.width = 5;
box.height = 2;
std::cout << "Volume: " << box.volume() << std::endl;

 

构造函数与析构函数

构造函数用于初始化对象,析构函数用于清理资源。

class Box {
public:
    Box(int l, int w, int h) : length(l), width(w), height(h) {}
    ~Box() {}
private:
    int length;
    int width;
    int height;
};

示例:定义和使用构造函数和析构函数。

Box box(10, 5, 2);
std::cout << "Volume: " << box.volume() << std::endl;

 

类的继承

继承用于创建新的类,该类从现有类继承属性和行为。

class Rectangle : public Box {
public:
    Rectangle(int l, int w) : Box(l, w, 0) {}
};

示例:定义和使用派生类。

Rectangle rect(10, 5);
std::cout << "Area: " << rect.length * rect.width << std::endl;

 

多态与虚函数

多态允许通过基类指针或引用调用派生类的函数。

class Base {
public:
    virtual void show() {
        std::cout << "Base class" << std::endl;
    }
};

class Derived : public Base {
public:
    void show() override {
        std::cout << "Derived class" << std::endl;
    }
};

示例:使用多态调用虚函数。 

Base *b;
Derived d;
b = &d;
b->show(); // 输出"Derived class"

运算符重载

运算符重载允许自定义运算符的行为。

class Complex {
public:
    int real, imag;
    Complex operator + (const Complex &obj) {
        Complex res;
        res.real = real + obj.real;
        res.imag = imag + obj.imag;
        return res;
    }
};

示例:重载加法运算符。

Complex c1{1, 2}, c2{3, 4};
Complex c3 = c1 + c2;
std::cout << "Sum: " << c3.real << " + " << c3.imag << "i" << std::endl;

 

10. 模板

函数模板

函数模板用于定义泛型函数。

template <typename T>
T add(T a, T b) {
    return a + b;
}

示例:使用函数模板

std::cout << "Int sum: " << add(1, 2) << std::endl;
std::cout << "Double sum: " << add(1.1, 2.2) << std::endl;

 

类模板

类模板用于定义泛型类。

template <typename T>
class Box {
    T data;
public:
    Box(T val) : data(val) {}
    T getData() { return data; }
};

示例:使用类模板。

Box<int> intBox(10);
Box<double> doubleBox(3.14);
std::cout << "Int data: " << intBox.getData() << std::endl;
std::cout << "Double data: " << doubleBox.getData() << std::endl;

 

11. STL(标准模板库)

容器

STL容器用于存储和管理数据。

#include <vector>
std::vector<int> vec = {1, 2, 3, 4, 5};

 示例:使用vector容器。

vec.push_back(6);
for (int val : vec) {
    std::cout << val << " ";
}
std::cout << std::endl;

算法

STL算法用于操作容器数据。

#include <algorithm>
std::sort(vec.begin(), vec.end());

示例:使用sort算法对vector排序。 

std::vector<int> numbers = {4, 2, 5, 3, 1};
std::sort(numbers.begin(), numbers.end());
for (int num : numbers) {
    std::cout << num << " ";
}
std::cout << std::endl;

 

迭代器

迭代器用于遍历容器。

std::vector<int>::iterator it;
for (it = vec.begin(); it != vec.end(); ++it) {
    std::cout << *it << std::endl;
}

示例:使用反向迭代器遍历容器。

for (std::vector<int>::reverse_iterator rit = vec.rbegin(); rit != vec.rend(); ++rit) {
    std::cout << *rit << " ";
}
std::cout << std::endl;

12. 文件操作

文件读写

C++提供了fstream库用于文件读写操作。

#include <fstream>
std::ofstream outFile("example.txt");
outFile << "Hello, World!" << std::endl;
outFile.close();

std::ifstream inFile("example.txt");
std::string line;
std::getline(inFile, line);
std::cout << line << std::endl;
inFile.close();

示例:写入和读取多个数据。

std::ofstream outFile("data.txt");
outFile << 1 << " " << 2 << " " << 3 << std::endl;
outFile.close();

std::ifstream inFile("data.txt");
int a, b, c;
inFile >> a >> b >> c;
std::cout << a << " " << b << " " << c << std::endl;
inFile.close();

文件流

文件流用于处理文件输入输出。

std::fstream file("example.txt", std::ios::in | std::ios::out);

示例:使用文件流进行读写操作。

std::fstream file("example.txt", std::ios::out | std::ios::in);
file << "New content" << std::endl;
file.seekg(0); // 移动到文件开头
std::string content;
std::getline(file, content);
std::cout << "Read from file: " << content << std::endl;
file.close();

 

13. 异常处理

异常处理用于处理程序中的错误情况。

try {
    // 可能抛出异常的代码
} catch (const std::exception &e) {
    std::cerr << "Exception: " << e.what() << std::endl;
} catch (...) {
    std::cerr << "Unknown exception" << std::endl;
}

示例:自定义异常类并抛出异常。

class MyException : public std::exception {
public:
    const char* what() const noexcept override {
        return "My custom exception";
    }
};

void functionThatThrows() {
    throw MyException();
}

int main() {
    try {
        functionThatThrows();
    } catch (const MyException &e) {
        std::cerr << "Caught exception: " << e.what() << std::endl;
    }
    return 0;
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1827480.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字电路中二进制的数据表达

文章目录 1. 二进制数据表达 1.1 二进制简介 1.2 用二进制表达文字 1.2.1 最开始的表达方式 1.2.2 通讯系统的编码和解码 1.2.3 集成电路 1.2.4 ASCII编码 1.2.5 GBK编码 1.2.6 Unicode编码 2. 用二进制表达图像 2.1 图片像素化 2.2 像素数字化 2.3 二值图像 2.4…

HTML+CSS 旋转呼吸加载器

效果演示 实现了一个旋转加载动画效果&#xff0c;包括一个圆形的加载框和两个不同颜色的圆形旋转动画。加载框和动画都使用了CSS的动画属性&#xff0c;实现了旋转和缩放的效果。整个加载动画的样式比较简单&#xff0c;使用了黑色和黄色的背景色&#xff0c;以及白色的文本颜…

哈希表、递归在二叉树中的应用-1372. 二叉树中的最长交错路径

题目链接及描述 1372. 二叉树中的最长交错路径 - 力扣&#xff08;LeetCode&#xff09; 题目分析 题目所述&#xff0c;计算在二叉树中交替遍历的最大深度【左->右->左】【右->左->右】&#xff0c;例如对于从当前根节点root出发&#xff0c;则此时遍历方向有两个…

【健身经验】2 圆肩

1、普拉提是针对小肌肉群锻炼&#xff0c;可以改善圆肩&#xff0c;圆肩就是因为背部没有力量&#xff0c;胸前也没有力量&#xff0c;因为平常没有用到这些肌肉 普拉提会用到小肌肉群&#xff0c;对于体态的纠正会比较好 2、肩背形态其实是发力问题&#xff0c;可以练习&…

springboot优雅shutdown时如何保障异步线程的安全

我前面写了一篇springboot优雅shutdown的文章&#xff0c;看起来一切很美好。 https://blog.csdn.net/chenshm/article/details/139640775 那是因为没有进行多线程测试。如果一个请求中包括阻塞线程&#xff08;主线程&#xff09;和非阻塞线程&#xff08;异步线程&#xff09…

“二分图匹配策略:匈牙利算法详解与应用实践“

二分图的最大匹配 给定一个二分图&#xff0c;其中左半部包含 &#x1d45b;1 个点&#xff08;编号 1∼&#x1d45b;1&#xff09;&#xff0c;右半部包含&#x1d45b;2 个点&#xff08;编号1∼&#x1d45b;2&#xff09;&#xff0c;二分图共包含 &#x1d45a; 条边。 …

ollama 多模态llava图像识别理解模型使用

参考: https://llava-vl.github.io/ https://ollama.com/blog/vision-models https://blog.csdn.net/weixin_42357472/article/details/137666022 下载: ollama run llava:13bcli使用 图片地址前面空格就行 describe this image: /ai/a1.jpg

最新版点微同城源码34.7+全套插件+小程序前后端(含安装教程)

模板挺好看的 带全套插件 自己耐心点配置一下插件 可以H5可以小程序 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89394996 更多资源下载&#xff1a;关注我。

维度建模中的事实表设计原则

维度建模是一种数据仓库设计方法&#xff0c;其核心是围绕业务过程建立事实表和维度表。事实表主要存储与业务过程相关的度量数据&#xff0c;而维度表则描述这些度量数据的属性。 以下是设计事实表时需要遵循的几个重要原则&#xff0c;来源于《维度建模》那本书上&#xff0…

正解 x86 Linux 内存管理

1&#xff0c;机器解析的思路 发现网络上大量的教程&#xff0c;多是以讹传讹地讲解 Linux 内存管理&#xff1b; 都是在讲&#xff1a; 逻辑地址 -> 线性地址 -> 物理地址 这个转换关系是怎么发生的。 上面这个过程确实是程序运行时地址的翻译顺序&#xff1b; …

Java课程设计:基于Javaweb的校园订餐系统

文章目录 一、项目介绍二、项目技术栈三、核心代码四、项目展示五、源码获取 一、项目介绍 在当今互联网高速发展的时代,大学校园内的学生生活正在发生着翻天覆地的变化。其中,校园内的餐饮服务无疑是亟需改革和创新的领域之一。 传统的校园食堂模式,往往存在就餐高峰时段拥挤…

[Cloud Networking] SPDY 协议

文章目录 1. 背景2. SPDY 之前3. SPDY 项目目标4. SPDY 功能特点4.1 SPDY基本功能4.2 SPDY高级功能 1. 背景 TCP是通用的、可靠的传输协议&#xff0c;提供保证交付、重复抑制、按顺序交付、流量控制、拥塞避免和其他传输特性。 HTTP是提供基本请求/响应语义的应用层协议。 不…

ubuntu 22.04下载和安装

ubuntu镜像: https://www.releases.ubuntu.com/22.04/ 然后下载vmwareworkstation16 密钥 ZF3R0-FHED2-M80TY-8QYGC-NPKYF

fiddler打开后,requests无法使用

Fiddler实用小技巧 错误情况 打开fiddler后&#xff0c;requests无法请求 requests.exceptions.ProxyError: HTTPSConnectionPool(hosth5api.m.taobao.com, port443): 说明 其实这是一个很小的坑&#xff0c;确也是一个很常见的坑。 在打开fiddler后&#xff0c;根据fiddle…

Linux笔记--ubuntu文件目录+命令行介绍

文件目录 命令行介绍 当我们在ubuntu中命令行处理位置输入ls后会显示出其所有目录&#xff0c;那么处理这些命令的程序就是shell&#xff0c;它负责接收用户的输入&#xff0c;并根据输入找到其他程序并运行 命令行格式 linux的命令一般由三部分组成&#xff1a;command命令、…

Cheat Engine CE v7.5 安装教程(专注于游戏的修改器)

前言 Cheat Engine是一款专注于游戏的修改器。它可以用来扫描游戏中的内存&#xff0c;并允许修改它们。它还附带了调试器、反汇编器、汇编器、变速器、作弊器生成、Direct3D操作工具、系统检查工具等。 一、下载地址 下载链接&#xff1a;http://dygod/source 点击搜索&…

微信小程序毕业设计-实验室管理系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

为什么用SDE(随机微分方程)来描述扩散过程【论文精读】

为什么用SDE(随机微分方程)来描述扩散过程【论文精读】 B站视频&#xff1a;为什么用SDE(随机微分方程)来描述扩散过程 论文&#xff1a;Score-Based Generative Modeling through Stochastic Differential Equations 地址&#xff1a;https://doi.org/10.48550/arXiv.2011.13…

读AI新生:破解人机共存密码笔记02进化

1. 人工智能的标准模型 1.1. 机器优化人类提供的固定目标 1.1.1. 是一条死胡同 1.1.1.1. 当你走进死胡同时&#xff0c;你最好掉头返回&#xff0c;找出走错的地方 1.2. 问题不在于我们可能无法做好构建人工智能系统的工作&…

LeetCode --- 401周赛

题目列表 3178. 找出 K 秒后拿着球的孩子 3179. K 秒后第 N 个元素的值 3180. 执行操作可获得的最大总奖励 I 3181. 执行操作可获得的最大总奖励 II 一、找出K秒后拿着球的孩子 这题可以直接模拟&#xff0c;从前往后&#xff0c;再从后往前走k次&#xff0c;最后直接返回…