C++ 接口(抽象类)
在C++中,接口的概念通常通过抽象类(Abstract Class)和纯虚函数(Pure Virtual Function)来实现。抽象类是一个包含纯虚函数的类,它不能被实例化,但可以作为其他类的基类,从而实现多态性。以下是使用抽象类和纯虚函数定义接口的基本概念:抽象类和纯虚函数抽象类是一个包含至少一个纯虚函数的类,纯虚函数是在基类中声明但没有提供实现的虚函数。class Shape {public: // 纯虚函数,定义接口 virtual void draw() const = 0; // 普通成员函数 void print() const { cout << "Printing from the base class\n"; }};class Circle : public Shape {public: // 实现纯虚函数 void draw() const override { cout << "Drawing a circle\n"; }};在上述例子中,Shape 是一个抽象...
C++ 数据封装
在C++中,数据封装是一种面向对象编程的概念,它将数据(成员变量)和操作数据的方法(成员函数)封装在一个单元(类)中。这样可以将数据的内部细节隐藏起来,只暴露必要的接口给外部,提高了代码的安全性和可维护性。以下是数据封装的一些关键概念:1. 类的定义类是C++中实现数据封装的基本构建块。在类中,你可以定义成员变量和成员函数,并通过访问修饰符来控制它们的访问权限。class MyClass {private: // 私有成员变量 int privateData;public: // 公共成员函数 void setPrivateData(int value) { privateData = value; } int getPrivateData() const { return privateData; }};在上述例子中,privateData 是私有成员变量,只能通过类内的公共成员函数进行访问和修改。2. 访问控制访问控制是数据封装的重要组成部分。使用 public、private 和 protected 这些访问修...
C++ 数据抽象
C++ 中的数据抽象是一种编程思想,它允许将数据的具体实现细节隐藏起来,仅向外部提供必要的接口和功能。数据抽象通过类的定义和封装实现,使得程序设计更加模块化、可维护和安全。以下是数据抽象的一些关键概念:1. 类和封装类是C++中实现数据抽象的主要手段。通过类,你可以将数据和相关的操作封装在一起,形成一个独立的实体。封装是指将类的实现细节隐藏在类的私有部分,只向外部提供公共接口。class BankAccount {private: double balance;public: // 公共接口 void deposit(double amount) { // 实现存款操作 balance += amount; } void withdraw(double amount) { // 实现取款操作 if (amount <= balance) { balance -= amount; } else { cout << "Insuff...
C++ 多态
C++ 中的多态性是一种面向对象编程的重要特性,它允许基类的指针或引用在运行时指向派生类的对象,实现了在运行时动态地选择正确的函数执行。C++ 中的多态性主要通过虚函数(virtual functions)和运行时类型识别(RTTI)来实现。虚函数和多态性虚函数是在基类中声明为虚函数的函数,可以在派生类中被重写。使用 virtual 关键字来声明虚函数。class Shape {public: virtual void draw() { cout << "Drawing a shape\n"; }};class Circle : public Shape {public: void draw() override { cout << "Drawing a circle\n"; }};在上述例子中,draw 是一个虚函数,它在基类 Shape 中被声明为虚函数,而在派生类 Circle 中被重写。多态性的实现通过将基类指针或引用指向派生类对象,可以实现多态性。在运行时,系统会根据实际对象的类型来调用相应的虚函数。...
C++ 重载运算符和重载函数
在C++中,你可以通过重载运算符和重载函数,为用户定义的类创建更灵活的操作。下面分别介绍重载运算符和重载函数的基本概念:重载运算符(Operator Overloading)C++允许你重载许多内置运算符,使其适用于用户自定义的类。例如,你可以重载 + 运算符以执行自定义的加法操作。class Complex {public: double real; double imag; // 重载 + 运算符 Complex operator+(const Complex& other) const { Complex result; result.real = real + other.real; result.imag = imag + other.imag; return result; }};int main() { Complex a{1.0, 2.0}; Complex b{3.0, 4.0}; Complex c = a + b; // 使用重载的 + 运算符 ...
C++ 继承
C++ 中的继承是一种面向对象编程的特性,允许一个类(子类/派生类)继承另一个类(父类/基类)的属性和行为。这有助于代码的重用和扩展。以下是一些关于C++继承的基本概念:基本继承语法// 基类class Shape {public: void draw() { cout << "Drawing a shape\n"; }};// 派生类class Circle : public Shape {public: void draw() { cout << "Drawing a circle\n"; }};在上述例子中,Circle 类继承自 Shape 类。关键字 public 表示派生类对基类的继承是公有的,这意味着派生类的对象可以访问基类的公有成员。访问控制继承时,可以使用 public、protected、private 这三个访问修饰符来控制基类成员在派生类中的访问权限:class Base {public: int publicMember;protected: int protectedMe...
C++ 类 & 对象
C++ 中的类(class)和对象(object)是面向对象编程的基本概念。让我们来深入了解。类的定义在 C++ 中,类是用户定义的一种数据类型,用于封装数据和相关的操作。类的定义包含成员变量(数据成员)和成员函数(操作成员)。// 示例类的定义class Car {public: // 成员变量 string brand; int year; // 成员函数 void start() { cout << "Engine started\n"; } void accelerate() { cout << "Accelerating...\n"; }};上述代码定义了一个名为 Car 的类,其中有两个成员变量(brand 和 year)和两个成员函数(start 和 accelerate)。对象的创建类提供了一个模板,而对象是类的实例。通过类创建对象的过程称为实例化。// 创建 Car 类的对象Car myCar;// 访问对象的成员变量和成员函数myCar.brand = "Toyota...
C++ 面向对象
当我们谈论C++的面向对象编程(OOP)时,我们通常指的是使用类(class)和对象(object)的编程范例。以下是一些关键概念:1. 类和对象: 类是一种用户定义的数据类型,表示一类对象的通用属性和行为。对象是类的实例,具体化了类的属性和行为。 // 示例类的定义 class Animal { public: // 成员变量 string name; int age; // 成员函数 void makeSound() { cout << "Some generic sound\n"; } };2. 封装(Encapsulation): 封装是指将数据和操作封装在一个单元(类)中,对外提供有限的接口。使用访问修饰符(public、private、protected)来控制成员的访问权限。 class Example { private: int privateData; public: void s...
C++ 数据结构
C++ 提供了丰富的数据结构,使得可以更有效地组织和处理数据。以下是一些常用的 C++ 数据结构:1. 数组(Array)数组是一组相同类型的元素的集合,使用整数索引访问元素。数组的大小在创建时固定。int numbers[5] = {1, 2, 3, 4, 5};2. 向量(Vector)向量是 C++ 标准库中提供的动态数组,可以动态调整大小。#include <vector>std::vector<int> vec = {1, 2, 3, 4, 5};3. 链表(Linked List)链表是一种动态数据结构,它通过指针将元素连接在一起。struct Node { int data; Node* next;};Node* head = nullptr;4. 栈(Stack)栈是一种后进先出(LIFO)的数据结构,只允许在栈顶进行插入和删除操作。#include <stack>std::stack<int> myStack;myStack.push(1);myStack.pop();5. 队列(Queue)队列是一种先进先...
C++ 基本的输入输出
在 C++ 中,输入和输出通常使用标准输入输出库 (<iostream>) 完成。这个库包含了用于处理输入和输出的 cin(标准输入)和 cout(标准输出)等对象。以下是一些关于 C++ 基本的输入和输出的基本概念和用法:1. 输出到控制台#include <iostream>int main() { // 输出字符串 std::cout << "Hello, World!" << std::endl; // 输出变量的值 int number = 42; std::cout << "The value of number is: " << number << std::endl; return 0;}2. 输入从控制台#include <iostream>int main() { // 输入整数 int number; std::cout << "Enter an integer: "; std::cin >&...
C++ 日期 & 时间
在 C++ 中,日期和时间的处理主要依赖于 <chrono> 头文件提供的库和 <ctime> 头文件中的一些函数。C++11 引入了 <chrono> 头文件,它提供了一套类型安全的日期和时间库。以下是一些关于 C++ 中日期和时间处理的基本概念和用法:1. <chrono> 头文件#include <iostream>#include <chrono>#include <ctime>2. 系统时钟使用 std::chrono::system_clock 可以获取当前时间点。auto currentTime = std::chrono::system_clock::now();3. 时间点和时钟周期std::chrono::time_point 表示一个时间点,std::chrono::duration 表示一个时钟周期。时钟周期的单位可以是秒、毫秒、微秒等。using namespace std::chrono;time_point<system_clock> start = syste...
C++ 引用
在 C++ 中,引用是一种为已存在的变量起别名的机制。引用提供了对变量的另一种名称,使得可以通过不同的名字访问同一内存位置的数据。引用通常用于函数参数、函数返回值和简化某些操作。以下是关于 C++ 引用的基本概念和用法:1. 引用的声明和初始化// 声明引用int number = 42;int& ref = number; // 引用必须在声明时进行初始化// 修改引用也会修改原始变量ref = 55;2. 引用作为函数参数引用可以作为函数参数,通过引用传递参数可以修改原始变量的值。// 引用作为函数参数void modifyValue(int& ref) { ref = 100;}int main() { int value = 42; modifyValue(value); // 传递变量 value 的引用,修改原始值 // 此时 value 的值变为 100 return 0;}3. 引用作为函数返回值函数可以返回引用,使得可以通过函数返回值直接修改调用者的变量。// 引用作为函数返回值int& getReference(...
C++ 指针
在 C++ 中,指针是一种特殊的变量,存储了一个内存地址。通过使用指针,你可以直接访问内存中的数据,进行动态内存分配以及有效地传递函数参数等。以下是一些关于 C++ 指针的基本概念和用法:1. 指针的声明和初始化// 声明指针int* ptr;// 初始化指针int number = 42;int* ptr = &number; // 将指针指向变量 number 的地址2. 获取指针指向的值// 获取指针指向的值int value = *ptr;3. 指针的空值// 空指针int* nullPtr = nullptr; // C++11 及以上版本使用 nullptr4. 动态内存分配// 动态分配内存int* dynamicPtr = new int;*dynamicPtr = 10;// 释放动态分配的内存delete dynamicPtr;5. 数组和指针// 指向数组的指针int array[5] = {1, 2, 3, 4, 5};int* arrayPtr = array;6. 指针和函数// 函数中的指针参数void updateValue(int* ptr) ...
C++ 字符串
在 C++ 中,字符串是一种用于存储文本数据的数据类型。C++ 提供了两种主要的字符串表示形式:C 风格字符串(字符数组)和 C++ 标准库中的字符串类(std::string)。1. C 风格字符串C 风格字符串是一维字符数组,以 null 结尾(以 \0 结尾)。可以使用字符数组来表示和操作字符串。// C 风格字符串的声明和初始化char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};// 或者更简便地char greeting[] = "Hello";使用 C 风格字符串的一些基本操作:#include <iostream>#include <cstring> // 包含 C 字符串操作的头文件int main() { char greeting[] = "Hello"; // 输出字符串 std::cout << greeting << std::endl; // 获取字符串长度 int length = strlen(greeting); std...
C++ 数组
在 C++ 中,数组是一种用于存储相同类型元素的数据结构。数组提供了一种有效的方式来组织和访问大量的数据。以下是一些关于 C++ 数组的基本概念和用法:1. 数组的声明和初始化在 C++ 中,数组的声明包括数组的类型和数组名,但不包括数组的大小。初始化可以在声明的同时完成,也可以在后续的语句中进行。// 声明和初始化数组int numbers[5] = {1, 2, 3, 4, 5};2. 数组的访问通过索引(下标)可以访问数组中的元素。数组的索引从 0 开始,直到数组大小减 1。int firstElement = numbers[0]; // 访问第一个元素int thirdElement = numbers[2]; // 访问第三个元素3. 数组的迭代使用循环结构可以方便地迭代数组中的所有元素。for (int i = 0; i < 5; ++i) { // 使用 numbers[i] 访问数组元素 std::cout << numbers[i] << " ";}4. 多维数组C++ 支持多维数组,例如二维数组、三维数组等。// 声明和初...
C++ 数字
在 C++ 中,数字是一种基本的数据类型,用于存储数值。C++ 提供了多种数字类型,包括整数、浮点数和其他派生的数字类型。以下是一些常见的数字类型和相关操作:1. 整数类型整数类型用于存储整数值。常见的整数类型包括 int、short、long 和 long long,它们具有不同的存储范围。int integerNumber = 42;short shortNumber = 32767;long longNumber = 123456789L;long long veryLongNumber = 123456789012345LL;2. 浮点数类型浮点数类型用于存储带有小数部分的数字。常见的浮点数类型包括 float 和 double,double 的精度通常比 float 高。float floatNumber = 3.14f;double doubleNumber = 3.1415926535;3. 常量可以使用 const 关键字创建常量,使得变量的值在程序中不可修改。const int constantNumber = 10;4. 运算操作C++ 提供了一系列的算术运算操作符...
C++ 函数
在 C++ 中,函数用于执行特定任务或计算,并且有自己的名称、参数列表和返回类型。函数允许你将代码划分为更小的可管理单元,提高代码的可读性和可维护性。以下是创建和使用函数的基本语法:1. 函数的声明在使用函数之前,需要先声明函数。函数声明包括函数的返回类型、函数名以及参数列表(如果有)。// 函数声明返回类型 函数名(参数类型1 参数名1, 参数类型2 参数名2, ...);例如:// 函数声明int add(int a, int b);2. 函数的定义函数的定义包括函数体,即函数要执行的实际代码。函数的定义通常放在程序的头部或源文件中。// 函数定义返回类型 函数名(参数类型1 参数名1, 参数类型2 参数名2, ...) { // 函数体 // 执行特定的任务 // 返回结果(如果有返回类型)}例如:// 函数定义int add(int a, int b) { return a + b; // 返回两个整数的和}3. 函数的调用在程序中的任何地方,可以通过函数名和参数列表来调用函数。函数调用会执行函数体中的代码,并返回结果(如果有返回类型)。// 函数调用i...
C++ 判断
在 C++ 中,判断结构通常使用 if、else if 和 else 关键字来执行条件判断。以下是一些基本的判断结构:1. if 语句if 语句用于执行条件判断,如果条件为真,则执行相应的代码块。if (条件) { // 如果条件为真执行的代码}例如:#include <iostream>int main() { int number = 10; if (number > 0) { std::cout << "Number is positive." << std::endl; } return 0;}2. if-else 语句if-else 语句用于在条件为真时执行一个代码块,否则执行另一个代码块。if (条件) { // 如果条件为真执行的代码} else { // 如果条件为假执行的代码}例如:#include <iostream>int main() { int number = -5; if (number > 0) { std::co...
C++ 循环
在 C++ 中,循环结构用于重复执行一组语句,直到满足特定的条件为止。C++ 提供了多种类型的循环,其中最常用的有 for 循环、while 循环和 do-while 循环。1. for 循环for 循环是一种在执行之前设置计数器、定义循环条件和更新计数器的便捷循环结构。for (初始化; 循环条件; 更新表达式) { // 循环体}例如,计算 1 到 5 的累加:#include <iostream>int main() { int sum = 0; for (int i = 1; i <= 5; ++i) { sum += i; } std::cout << "Sum: " << sum << std::endl; return 0;}2. while 循环while 循环在每次循环之前检查循环条件,只要条件为真,就会执行循环体。while (循环条件) { // 循环体}例如,计算 1 到 5 的累加:#include <iostream>int main()...
C++ 运算符
C++ 提供了多种运算符,用于执行不同类型的操作,包括算术运算、关系运算、逻辑运算、位运算等。以下是 C++ 中一些常见的运算符:1. 算术运算符int a = 5, b = 2;int result;result = a + b; // 加法result = a - b; // 减法result = a * b; // 乘法result = a / b; // 除法result = a % b; // 取余result++; // 后置递增++result; // 前置递增result--; // 后置递减--result; // 前置递减2. 关系运算符bool isEqual = (a == b); // 等于bool isNotEqual = (a != b); // 不等于bool isGreaterThan = (a > b); // 大于bool isLessThan = (a < b); // 小于bool isGreaterOrEqual = (a >= b); // 大于等于bool isLessOrEqual = (a <= b); // ...