MST

星途 面试题库

面试题:C++面向对象思想的优势举例及代码实现

请阐述C++面向对象思想中封装性的优势,并通过一段简单的C++代码示例展示如何利用封装提高代码的安全性和可维护性。
24.8万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

封装性的优势

  1. 数据隐藏:将数据成员设为私有,防止外部直接访问和修改,保护数据的完整性和安全性。
  2. 提高可维护性:将数据和操作数据的方法封装在一起,当数据结构或操作方式发生变化时,只需在类内部修改,外部调用无需改变。
  3. 代码模块化:每个类负责特定的功能,使得程序结构更加清晰,易于理解和扩展。

代码示例

#include <iostream>

class BankAccount {
private:
    double balance; // 私有数据成员,账户余额
public:
    // 构造函数
    BankAccount(double initialBalance = 0.0) : balance(initialBalance) {}

    // 存款函数
    void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
        } else {
            std::cout << "存款金额必须为正数。" << std::endl;
        }
    }

    // 取款函数
    void withdraw(double amount) {
        if (amount > 0 && amount <= balance) {
            balance -= amount;
        } else {
            std::cout << "取款金额无效或余额不足。" << std::endl;
        }
    }

    // 获取余额函数
    double getBalance() const {
        return balance;
    }
};

int main() {
    BankAccount account(1000.0); // 创建一个初始余额为1000的账户

    account.deposit(500.0); // 存款500
    account.withdraw(300.0); // 取款300

    std::cout << "当前账户余额: " << account.getBalance() << std::endl;

    return 0;
}

在上述代码中,BankAccount类将balance数据成员设为私有,外部代码无法直接访问和修改。通过提供depositwithdrawgetBalance等公有成员函数来操作和获取余额,在这些函数内部可以进行数据验证和逻辑控制,从而提高了代码的安全性和可维护性。如果后续需要修改余额的存储方式或取款逻辑,只需在类内部修改,不会影响到main函数中的外部调用。