当前位置: 首页 > news >正文

[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>

    • coutcin替代printfscanf,类型安全且更灵活。

    • 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默认成员为privatestruct默认为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

相关文章:

  • Leetcode 寻找两个正序数组的中位数
  • CAM获取操作(程序组)的加工时间
  • 短视频团队架构工作流程---2025.3.30 李劭卓
  • python: DDD+ORM+pyQt6 using MySql
  • 用 Python 实现机器学习小项目:从入门到实战
  • Pyside6 信号与槽
  • 阿里云下一代可观测时序引擎-MetricStore 2.0
  • CPM:大规模生成式中文预训练语言模型
  • 从头开始运行一个yolo11的分类模型
  • MySQL响应慢是否由堵塞或死锁引起?
  • 端到端自动驾驶VLA模型:技术解析与模型设计
  • PostgreSQL数据库迁移到Docker拉取的pg镜像中的
  • 3.30 学习总结 Java 常用API+图形化界面
  • Linux系统中修改主机名及设置固定IP地址保姆级教程
  • UE5学习笔记 FPS游戏制作29 更换武器时更换武器的图标
  • 大模型LLMs基于Langchain+FAISS+Ollama/Deepseek/Qwen/OpenAI的RAG检索方法以及优化
  • Java图片加水印 实战demo
  • Linux中逻辑卷的使用、扩容与磁盘配额
  • LeetCode hot 100—排序链表
  • 通俗易懂的讲解SpringBean生命周期
  • 21-bfs-走迷宫(简单模板题)
  • 3132_nodejs_express后端框架
  • Spring中@Value的使用详解,以及和@ConfigurationProperties使用对比
  • 开源项目解读(https://github.com/zjunlp/DeepKE)
  • 补Java基础之重生(14)API(下)
  • 鸿蒙应用权限深度解析:构建安全可信的分布式应用
  • 绿盟春招面试题
  • 输出3行3列矩阵的鞍点
  • 大商创多用户商城系统存在SQL注入漏洞
  • 【蓝桥杯—单片机】通信总线专项 | 真题整理、解析与拓展 (更新ing...)