深入浅出 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++ 能精细控制内存和性能! 🚀

相关推荐
JJay.19 分钟前
Android Kotlin 协程使用指南
android·开发语言·kotlin
BLUcoding1 小时前
Android 布局介绍
android
summerkissyou19871 小时前
android-蓝牙-状态和协议值总结及监听例子
android·蓝牙
徒 花1 小时前
数据库知识复习05
android·数据库
提子拌饭1333 小时前
番茄时间管理:鸿蒙Flutter 实现的高效时间管理工具
android·flutter·华为·架构·开源·harmonyos·鸿蒙
4311媒体网3 小时前
帝国CMS二次开发实战:精准实现“最新资讯”标识与高亮判断
android
BLUcoding4 小时前
Android 轻量级本地存储 SharedPreferences
android
冬奇Lab4 小时前
Camera HAL3 接口:Android 相机的真正底牌
android·音视频开发·源码阅读
sensen_kiss4 小时前
CAN302 Technologies for E-Commerce 电子商务技术 Pt.6 市场营销与SEO(搜索引擎优化)
android·学习·搜索引擎
菜鸟国国5 小时前
Compose + Koin ViewModel 实战完全手册
android