深入浅出 C++ 特有关键字

深入浅出 C++ 特有关键字

作为 Java 程序员,看到 C++ 的这些关键字可能会一脸懵。我来用最直白的例子解释这些 Java 里没有的"特殊密码":

1. 内存管理三兄弟

new / delete - 手动内存管理

cpp 复制代码
int* num = new int(10); // 手动分配内存
cout << *num; // 输出10
delete num;   // 必须手动释放!

➔ Java 只有 new,垃圾回收自动处理,C++ 要自己 delete

delete[] - 删除数组

cpp 复制代码
int* arr = new int[3]{1,2,3}; // 动态数组
delete[] arr; // 必须用 delete[] 删除数组

➔ Java 数组是对象,自动回收

2. 指针操作双雄

* - 定义指针

cpp 复制代码
int value = 5;
int* ptr = &value; // ptr存储value的内存地址
cout << *ptr; // 输出5(*解引用)

➔ Java 没有指针概念(引用类似但不同)

& - 取地址/引用

cpp 复制代码
int a = 10;
int& ref = a; // ref是a的别名
ref = 20;     // 现在a也变成20

➔ Java 的 & 只用于位运算

3. 类操作四天王

friend - 友元(打破封装)

cpp 复制代码
class Teacher {
private:
    int salary;
    friend class Principal; // 校长可以看老师工资
};

class Principal {
public:
    void check(Teacher& t) {
        cout << t.salary; // 可以访问私有成员
    }
};

➔ Java 没有这种"开后门"机制

operator - 运算符重载

cpp 复制代码
class Vector {
public:
    int x,y;
    Vector operator+(Vector v) { // 重载+
        return Vector{x+v.x, y+v.y};
    }
};

Vector v1{1,2}, v2{3,4};
Vector v3 = v1 + v2; // 现在可以向量相加

➔ Java 不支持运算符重载

virtual - 虚函数(多态核心)

cpp 复制代码
class Animal {
public:
    virtual void speak() { // 虚函数
        cout << "动物叫";
    }
};

class Cat : public Animal {
public:
    void speak() override { // 重写
        cout << "喵喵";
    }
};

Animal* pet = new Cat();
pet->speak(); // 输出"喵喵"(动态绑定)

➔ Java 所有方法默认虚函数(除非 final

explicit - 禁止隐式转换

cpp 复制代码
class Student {
public:
    explicit Student(int age) {} // 必须显式构造
};

// Student s = 18; ❌ 报错!
Student s(18); // ✅ 必须这样写

➔ Java 构造方法没有这种限制

4. 模板编程三剑客

template - 泛型编程

cpp 复制代码
template<typename T>
T max(T a, T b) { // 万能比较
    return a > b ? a : b;
}

cout << max(3,5);   // 5
cout << max(3.14, 2.71); // 3.14

➔ Java 用 <T> 泛型,但实现机制不同

typename / class (模板参数)

cpp 复制代码
template<class T> // 也可以用 typename
void print(T data) {
    cout << data;
}

➔ Java 泛型只支持引用类型

5. 其他特色关键字

mutable - 突破const限制

cpp 复制代码
class Counter {
    mutable int count; // 即使在const方法中也能修改
public:
    void add() const { 
        count++; // 正常const函数不能修改成员
    }
};

➔ Java 没有这种设计

asm - 内联汇编

cpp 复制代码
asm("mov eax, 5"); // 直接写汇编指令

➔ Java 不能直接操作硬件

goto - 跳转语句

cpp 复制代码
start:
    cout << "你好";
    goto start; // 无限循环

➔ Java 保留但禁止使用

对比表格

关键字 C++ 作用 Java 对应 差异点
new/delete 手动内存管理 自动GC C++要手动释放
*/& 指针/引用 只有引用 Java没有真指针
friend 友元类 Java严格封装
operator 运算符重载 不支持 Java不能重载+-*/
virtual 虚函数 默认虚函数 Java除非用final
template 模板 泛型 C++模板更强大

这些就是 Java 程序员需要特别注意的 C++ 特有关键字。刚开始可能会觉得麻烦,但正是这些特性让 C++ 能精细控制内存和性能! 🚀

相关推荐
NRatel11 分钟前
Unity 游戏提升 Android TargetVersion 相关记录
android·游戏·unity·提升版本
叽哥3 小时前
Kotlin学习第 1 课:Kotlin 入门准备:搭建学习环境与认知基础
android·java·kotlin
风往哪边走3 小时前
创建自定义语音录制View
android·前端
用户2018792831673 小时前
事件分发之“官僚主义”?或“绕圈”的艺术
android
用户2018792831673 小时前
Android事件分发为何喜欢“兜圈子”?不做个“敞亮人”!
android
Kapaseker5 小时前
你一定会喜欢的 Compose 形变动画
android
QuZhengRong5 小时前
【数据库】Navicat 导入 Excel 数据乱码问题的解决方法
android·数据库·excel
zhangphil6 小时前
Android Coil3视频封面抽取封面帧存Disk缓存,Kotlin(2)
android·kotlin
程序员码歌13 小时前
【零代码AI编程实战】AI灯塔导航-总结篇
android·前端·后端
书弋江山14 小时前
flutter 跨平台编码库 protobuf 工具使用
android·flutter