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

相关推荐
Mr YiRan43 分钟前
Android Gradle多渠道打包
android
IvanCodes2 小时前
MySQL 视图
android·数据库·sql·mysql·oracle
KevinWang_2 小时前
Java 和 Kotlin 混编导致的 bug
android·kotlin
好学人2 小时前
Android动画系统全面解析
android
leverge20092 小时前
android studio 运行java main报错
android·ide·android studio
RichardLai882 小时前
Flutter 环境搭建
android·flutter
思想觉悟2 小时前
ubuntu编译android12源码
android·ubuntu·源码
好学人3 小时前
Android自定义控件事件传递机制
android
V少年3 小时前
深入浅出 C++ 标准库
android