[C++]C++入门篇 2025最新版
第一阶段:C++基础语法与C的差异
1.1 C++的Hello World
#include <iostream> // C++标准输入输出库
// 使用命名空间std(后续会详细讲解)
using namespace std;
int main() {
cout << "Hello, World!" << endl; // cout替代printf,<< 是流操作符
return 0;
}
-
差异点:
-
头文件不带
.h
,如<iostream>
。 -
cout
和cin
替代printf
和scanf
,类型安全且更灵活。 -
endl
用于换行(等价于'\n'
,但会刷新缓冲区)。
-
1.2 命名空间(Namespace)
-
作用:避免全局变量/函数的名字冲突。
namespace MySpace {
int value = 10;
void print() { cout << "MySpace" << endl; }
}
int main() {
cout << MySpace::value << endl; // 通过::访问
MySpace::print();
return 0;
}
-
using namespace std;
表示直接使用std
命名空间内的所有内容(谨慎使用,可能导致命名冲突)。
1.3 变量声明的位置
-
C:变量必须在作用域开头声明。
-
C++:变量可以在任何位置声明(更灵活)。
int main() { for (int i = 0; i < 5; i++) { // i在循环内声明 cout << i << endl; } return 0; }
1.4 引用(Reference)
-
作用:变量的别名,操作引用等价于操作原变量。
int a = 10;
int &ref = a; // ref是a的引用
ref = 20; // a的值变为20
-
与指针的区别:
-
引用必须初始化且不能更改指向。
-
更安全,无需检查空指针。
-
第二阶段:面向对象编程(OOP)
2.1 类与对象
class Dog { // class替代struct,默认成员是private
public: // 访问修饰符
string name; // 成员变量
void bark() { // 成员函数
cout << name << " says Woof!" << endl;
}
};
int main() {
Dog myDog;
myDog.name = "Buddy";
myDog.bark();
return 0;
}
-
类 vs 结构体:
class
默认成员为private
,struct
默认为public
(兼容C)。
2.2 构造函数与析构函数
class Student {
private:
string name;
int age;
public:
// 构造函数(与类同名,无返回值)
Student(string n, int a) : name(n), age(a) {}
// 析构函数(~类名,用于释放资源)
~Student() { cout << "Object destroyed" << endl; }
void display() {
cout << name << ", " << age << " years old" << endl;
}
};
int main() {
Student s("Alice", 20); // 调用构造函数
s.display();
return 0; // 析构函数自动调用
}
2.3 继承
// 基类
class Animal {
public:
void eat() { cout << "Eating..." << endl; }
};
// 派生类(公有继承)
class Cat : public Animal {
public:
void meow() { cout << "Meow!" << endl; }
};
int main() {
Cat kitty;
kitty.eat(); // 继承自Animal
kitty.meow();
return 0;
}
2.4 多态与虚函数
class Shape {
public:
virtual void draw() { // 虚函数
cout << "Drawing a shape" << endl;
}
};
class Circle : public Shape {
public:
void draw() override { // 重写虚函数
cout << "Drawing a circle" << endl;
}
};
int main() {
Shape* shape = new Circle();
shape->draw(); // 输出"Drawing a circle"(动态绑定)
delete shape;
return 0;
}
第三阶段:内存管理与现代C++特性
3.1 new/delete vs malloc/free
int* p = new int(10); // 动态分配内存并初始化
cout << *p << endl; // 输出10
delete p; // 释放内存
// 动态数组
int* arr = new int[5]{1,2,3,4,5};
delete[] arr;
-
优势:
new
会调用构造函数,delete
调用析构函数,更安全。
3.2 智能指针(C++11)
#include <memory>
// unique_ptr(独占所有权)
unique_ptr<int> uptr(new int(5));
cout << *uptr << endl; // 输出5
// shared_ptr(共享所有权)
shared_ptr<int> sptr1 = make_shared<int>(10);
shared_ptr<int> sptr2 = sptr1; // 引用计数+1
第四阶段:模板与STL
4.1 函数模板
template <typename T>
T max(T a, T b) {
return (a > b) ? a : b;
}
int main() {
cout << max(3, 5) << endl; // 输出5
cout << max(2.5, 1.5) << endl; // 输出2.5
return 0;
}
4.2 STL容器:vector
#include <vector>
vector<int> nums = {1,2,3,4,5};
nums.push_back(6); // 添加元素
for (auto num : nums) { // 范围for循环(C++11)
cout << num << " ";
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/101994.html
如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!