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

目录

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:// statementsbreak;case value2:// statementsbreak;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.mzph.cn/web/27906.shtml

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

相关文章

本地部署 Stable Diffusion3

6月13日&#xff0c;Stability AI 正式开源20亿参数版本的Stable Diffusion 3 Medium。本文将在本地部署 SD3&#xff0c;GPU配置如下 GPU 2080TI / 22G 安装依赖 修改 WORKSPACE 位置信息&#xff0c;安装ComfyUI # #title Environment Setupfrom pathlib import PathOPTIO…

PHP 命名空间

PHP 命名空间 PHP命名空间是一种组织代码的结构,它允许开发者在PHP代码中避免类、函数或常量名称的冲突。在PHP中,命名空间通过namespace关键字来声明。使用命名空间,可以在不同的代码库或项目中使用相同的类名,而不会产生冲突。 命名空间的基本概念 在PHP中,命名空间类…

决策树算法介绍:原理与案例实现

一、引言 决策树是一种常用于分类和回归任务的机器学习算法&#xff0c;因其易于理解和解释的特点&#xff0c;在数据分析和挖掘领域有着广泛应用。本文将介绍决策树算法的基本原理&#xff0c;并通过一个具体案例展示如何实现和应用该算法。 二、决策树算法原理 1. 决策树结…

SoftReference 到底在什么时候被回收 ? 如何量化内存不足 ?

本文基于 OpenJDK17 进行讨论&#xff0c;垃圾回收器为 ZGC。 提示&#xff1a; 为了方便大家索引&#xff0c;特将在上篇文章 《以 ZGC 为例&#xff0c;谈一谈 JVM 是如何实现 Reference 语义的》 中讨论的众多主题独立出来。 大家在网上或者在其他讲解 JVM 的书籍中多多少少…

C++ 取近似值

描述 写出一个程序&#xff0c;接受一个正浮点数值&#xff0c;输出该数值的近似整数值。如果小数点后数值大于等于 0.5 ,向上取整&#xff1b;小于 0.5 &#xff0c;则向下取整。 数据范围&#xff1a;保证输入的数字在 32 位浮点数范围内 输入描述&#xff1a; 输入一个正…

关于QTcreator,19年大学时写的文章了,之前写在印象笔记现在拉过来,往事如烟呐

1.初来乍到&#xff0c;先按照书本写一个基础列程理解一下原理。 这里创建工程的时候选择Qdialog基类&#xff0c;dialog.h头文件&#xff0c;并且勾选了创建界面 &#xff08;勾选之后可以通过手动添加组块并且可以自生成他们的函数定义&#xff0c;如果没有勾选&#xff0c;…

Mybatis源码解析

MybatisAutoConfiguration或者MybatisPlusAutoConfiguration核心作用是初始化工厂类SqlSessionFactory&#xff0c;其中包含属性interceptors、MapperLocations、TypeAliasesPackage、TypeEnumsPackage、TypeHandlers等。 MybatisAutoConfiguration自动装配类是由依赖&#xf…

聊天页面样式

聊天页面样式 代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><link rel"styleshee…

C++程序员笔试训练

面试题1&#xff1a;使用库函数将数字转换位字符串 考点&#xff1a;c语言库函数中数字转换位字符串的使用 char *gcvt(double number, int ndigit, char *buf);参数说明&#xff1a; number&#xff1a;待转换的double类型数值。 ndigit&#xff1a;保留的小数位数。 buf&am…

数智教育创新如何向未来?腾讯云与你探索革新之路

引言 随着科技革命的快速发展&#xff0c;掀起教育领域的变革&#xff0c;新理念、新技术、新模式、新应用正不断涌现&#xff0c;正塑造着教育的未来形态。未来科技还将如何赋能教育创新&#xff1f; 5月31日&#xff0c;由腾讯云TVP 与西安电子科技大学联合举办的「数智教育的…

LC1020:飞地的数量

题目 给你一个大小为 m x n 的二进制矩阵 grid &#xff0c;其中 0 表示一个海洋单元格、1 表示一个陆地单元格。 一次 移动 是指从一个陆地单元格走到另一个相邻&#xff08;上、下、左、右&#xff09;的陆地单元格或跨过 grid 的边界。 返回网格中 无法 在任意次数的移动…

Spark 面试题(十一)

1. 简述reduceByKey和groupByKey的区别和作用 &#xff1f; reduceByKey和groupByKey是Spark中的两种用于处理键值对&#xff08;Key-Value Pairs&#xff09;RDD的转换操作&#xff0c;它们在功能和性能上有一些关键的区别&#xff1a; groupByKey 作用&#xff1a;groupBy…

C++访问Private,Protecd的一些方法总结

前言 在编写C程序中 我们偶尔会碰到这样的三种特殊修改变量值的需求&#xff1a; [1]在不修改类原本的实现下&#xff0c;访问修改类的Private变量 [2]在不修改类原本的实现下&#xff0c;修改类的Protected变量 Private变量访问 public类模版函数特化 这种办法利用了类模…

springboot使用webscoket

springboot添加config配置项 package cn.lsy.api.yuy.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.server.standard.ServerEndpointExporter;Configur…

CMS与AI的融合:构建万能表单小程序系统

引言&#xff1a; 随着人工智能技术的飞速发展&#xff0c;MyCMS作为一款功能强大的内容管理系统&#xff0c;通过集成AI技术&#xff0c;进一步拓展了其应用范围和智能化水平。本文将探讨如何利用MyCMS结合AI技术&#xff0c;构建一个能够将用户提交的万能表单数据转化为智能提…

helm命令如何修改values.yaml里面的变量值

在使用 Helm 安装 chart 的时候&#xff0c;你有几种方法可以在安装时修改 values.yaml 中的值&#xff0c;以便自定义安装。这些方法让你无需直接编辑 chart 包中原始的 values.yaml 文件&#xff1a; 1. 使用 --values 或 -f 参数指定自定义 values 文件 你可以创建一个自定…

【Ardiuno】实验使用ESP32单片机根据光线变化控制LED小灯开关(图文)

今天小飞鱼继续来实验ESP32的开发&#xff0c;这里使用关敏电阻来配合ESP32做一个我们平常接触比较多的根据光线变化开关灯的实验。当白天时有太阳光&#xff0c;则把小灯关闭&#xff1b;当光线不好或者黑天时&#xff0c;自动打开小灯。 int value;void setup() {pinMode(34…

前端老古董execCommand——操作 选中文本 样式

文章目录 ⭐前言⭐exe command api用法&#x1f496; example示例&#x1f496; 测试效果 ⭐execommand和getSelection 的联系⭐总结⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本文分享关于 前端老古董execCommand——操作选中文本。 execommand 当一个 HTML 文…

基于CentOS Stream 9平台安装Redis7.0.15

1. 官方下载地址 https://redis.io/downloads/#redis-downloads 1.1 下载或上传到/opt/coisini目录下&#xff1a; mkdir /opt/coisini cd /opt/coisini wget https://download.redis.io/releases/redis-7.0.15.tar.gz2. 解压 tar -zxvf redis-7.0.15.tar.gz 3. 创建软连接 或…

算法:分治(快排)题目练习

目录 题目一&#xff1a;颜色分类 题目二&#xff1a;排序数组 题目三&#xff1a;数组中的第k个最大元素 题目四&#xff1a;库存管理III 题目一&#xff1a;颜色分类 给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums &#xff0c;原地对它们进行排序&#xff0c;…