C++基础回顾
数据类型与运算符
数据类型
在C++中,数据类型定义了变量可以存储的值的类型。以下是基本的数据类型示例:
#include <iostream>
int main() {
int a = 10; // 整型
float b = 10.5f; // 浮点型
char c = 'A'; // 字符型
bool d = true; // 布尔型
std::cout << "a = " << a << std::endl;
std::cout << "b = " << b << std::endl;
std::cout << "c = " << c << std::endl;
std::cout << "d = " << d << std::endl;
return 0;
}
运算符
C++提供了丰富的运算符,用于各种数学和逻辑操作。以下是一些基本的运算符示例:
#include <iostream>
int main() {
int x = 5, y = 3, z = 2;
std::cout << "Addition: " << x + y << std::endl;
std::cout << "Subtraction: " << x - y << std::endl;
std::cout << "Multiplication: " << x * y << std::endl;
std::cout << "Division: " << x / y << std::endl;
std::cout << "Modulus: " << x % y << std::endl;
bool condition = (x > y) && (y < z);
std::cout << "Logical AND: " << condition << std::endl;
return 0;
}
面向对象编程
类与对象
在C++中,类是定义具有特定属性和行为的对象的模板。下面是一个简单的类定义示例:
#include <iostream>
class Circle {
public:
float radius;
void setRadius(float r) {
radius = r;
}
float getArea() const {
return 3.14 * radius * radius;
}
};
int main() {
Circle c;
c.setRadius(5);
std::cout << "Area of circle: " << c.getArea() << std::endl;
return 0;
}
封装
封装是将数据和操作数据的函数封装在一起,以隐藏实现细节。上述代码中,Circle
类的radius
属性和getArea
函数都封装在类内部。
继承与多态
继承允许创建新类,该类继承现有类的属性和行为。多态则是允许不同类的对象对同一种消息做出响应。
#include <iostream>
class Shape {
public:
virtual float area() const = 0; // 抽象函数
};
class Circle : public Shape {
private:
float radius;
public:
Circle(float r) : radius(r) {}
float area() const override {
return 3.14 * radius * radius;
}
};
class Rectangle : public Shape {
private:
float width, height;
public:
Rectangle(float w, float h) : width(w), height(h) {}
float area() const override {
return width * height;
}
};
int main() {
Circle c(5);
Rectangle r(4, 6);
std::cout << "Circle area: " << c.area() << std::endl;
std::cout << "Rectangle area: " << r.area() << std::endl;
return 0;
}
指针与内存管理
指针概念
指针在C++中是一种用于存储内存地址的变量。下面是一个使用指针的例子:
#include <iostream>
int main() {
int a = 10;
int *p = &a; // p 指向 a 的内存地址
std::cout << "Value of a: " << *p << std::endl;
*p = 15; // 通过指针修改 a 的值
std::cout << "Value of a after modification: " << *p << std::endl;
return 0;
}
动态内存分配
动态内存分配允许程序在运行时分配和释放内存。使用new
和delete
操作符:
#include <iostream>
int main() {
int *p;
p = new int(10); // 动态分配内存
std::cout << "Value of dynamically allocated memory: " << *p << std::endl;
delete p; // 释放内存
return 0;
}
析构函数
析构函数在对象销毁时自动调用,用于清理资源。定义析构函数时,前缀为~:
#include <iostream>
class MyClass {
public:
~MyClass() {
std::cout << "Object destroyed." << std::endl;
}
};
int main() {
MyClass obj;
return 0;
}
异常处理
异常处理机制允许代码更优雅地处理错误。使用try
, catch
和throw
:
#include <iostream>
void divide(int a, int b) {
if (b == 0) throw std::runtime_error("Divide by zero error.");
std::cout << "Result: " << a / b << std::endl;
}
int main() {
try {
divide(10, 0);
} catch (const std::exception& e) {
std::cerr << "Exception caught: " << e.what() << std::endl;
}
return 0;
}
标准模板库(STL)
容器
STL容器是用于存储元素的模板类。以下是一个使用vector
的例子:
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3};
for (int num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
算法与迭代器
STL提供了丰富的算法和迭代器,用于高效地操作容器。以下使用sort
算法:
#include <iostream>
#include <algorithm>
#include <vector>
int main() {
std::vector<int> vec = {3, 1, 2};
std::sort(vec.begin(), vec.end());
for (int num : vec) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
项目实战案例
问题描述
假设我们要开发一个简单的日程管理应用,用于存储、查询和修改每日任务。
解决方案设计
- 数据模型:任务(标题、描述、截止日期、完成状态)。
- 功能:添加任务、删除任务、查询任务、更新任务状态。
代码实现
#include <iostream>
#include <vector>
#include <string>
class Task {
public:
std::string title;
std::string description;
std::string dueDate;
bool completed;
Task(const std::string& title, const std::string& description, const std::string& dueDate, bool completed) :
title(title), description(description), dueDate(dueDate), completed(completed) {}
};
class Calendar {
private:
std::vector<Task> tasks;
public:
void addTask(const Task& task) {
tasks.push_back(task);
}
void removeTask(const std::string& title) {
for (auto it = tasks.begin(); it != tasks.end(); ++it) {
if (it->title == title) {
tasks.erase(it);
break;
}
}
}
void queryTask(const std::string& title) {
for (const Task& task : tasks) {
if (task.title == title) {
std::cout << "Title: " << task.title << std::endl;
std::cout << "Description: " << task.description << std::endl;
std::cout << "Due Date: " << task.dueDate << std::endl;
std::cout << "Completed: " << (task.completed ? "Yes" : "No") << std::endl;
return;
}
}
std::cout << "Task not found." << std::endl;
}
void updateTaskStatus(const std::string& title, bool completed) {
for (auto& task : tasks) {
if (task.title == title) {
task.completed = completed;
break;
}
}
}
};
int main() {
Calendar calendar;
Task task1("Buy groceries", "Prepare a shopping list", "2023-10-01", false);
Task task2("Finish project", "Revise code sections", "2023-10-02", false);
calendar.addTask(task1);
calendar.addTask(task2);
calendar.queryTask("Buy groceries");
std::cout << std::endl;
calendar.updateTaskStatus("Buy groceries", true);
calendar.queryTask("Buy groceries");
return 0;
}
通过这个案例,读者能够将学习的C++知识应用于实际项目,理解如何设计和实现基本的应用逻辑,以及如何利用STL容器和算法来简化代码、提高效率。
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦