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

相关推荐
YY_pdd23 分钟前
使用go开发安卓程序
android·golang
Android 小码峰啊2 小时前
Android Compose 框架物理动画之捕捉动画深入剖析(29)
android·spring
bubiyoushang8882 小时前
深入探索Laravel框架中的Blade模板引擎
android·android studio·laravel
cyy2982 小时前
android 记录应用内存
android·linux·运维
CYRUS STUDIO3 小时前
adb 实用命令汇总
android·adb·命令模式·工具
这儿有一堆花3 小时前
安卓应用卡顿、性能低下的背后原因
android·安卓
byte轻骑兵3 小时前
【Bluedroid】蓝牙HID DEVICE断开连接流程源码分析
android·c++·蓝牙·hid·bluedroid
Edward Nygma3 小时前
springboot3+vue3融合项目实战-大事件文章管理系统-更新用户密码
android·开发语言·javascript
投笔丶从戎7 小时前
Kotlin Multiplatform--03:项目实战
android·开发语言·kotlin
居然是阿宋7 小时前
Android Canvas API 详细说明与示例
android