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

相关推荐
androidwork7 小时前
Android LinearLayout、FrameLayout、RelativeLayout、ConstraintLayout大混战
android·java·kotlin·androidx
每次的天空7 小时前
Android第十三次面试总结基础
android·面试·职场和发展
wu_android7 小时前
Android 相对布局管理器(RelativeLayout)
android
李斯维9 小时前
循序渐进 Android Binder(二):传递自定义对象和 AIDL 回调
android·java·android studio
androidwork9 小时前
OkHttp 3.0源码解析:从设计理念到核心实现
android·java·okhttp·kotlin
像风一样自由9 小时前
【001】frida API分类 总览
android·frida
casual_clover9 小时前
Android 之 kotlin 语言学习笔记四(Android KTX)
android·学习·kotlin
移动开发者1号11 小时前
Android 大文件分块上传实战:突破表单数据限制的完整方案
android·java·kotlin
移动开发者1号11 小时前
单线程模型中消息机制解析
android·kotlin
每次的天空14 小时前
Android第十五次面试总结(第三方组件和adb命令)
android