Skip to content

C++ OOP 面试高频知识点 - 01

类与对象、成员变量 / 成员函数、访问控制(public/protected/private)

1. 类与对象的基本概念

在 C++ 中,类(Class) 是一种用户定义的数据类型,它包含了数据(成员变量)和操作这些数据的函数(成员函数)。对象(Object) 是类的实例化结果。

class MyClass {
public:
    // 成员变量
    int x;
    double y;

    // 成员函数
    void print() {
        cout << "x = " << x << ", y = " << y << endl;
    }
};

int main() {
    MyClass obj; // 创建对象
    obj.x = 10;
    obj.y = 3.14;
    obj.print(); // 调用成员函数

    return 0;
}

2. 访问控制(Access Control)

C++ 提供了三种访问控制关键字,用于控制类的成员对外部代码的可见性:

2.1 public(公共的)

  • 成员变量和函数可以被类的外部代码访问
  • 通常用于提供类的接口
class MyClass {
public:
    int x;
    void setX(int value) {
        x = value;
    }
    int getX() const {
        return x;
    }
};

2.2 protected(受保护的)

  • 成员变量和函数可以被类本身和派生类访问
  • 不能被外部代码直接访问
class Base {
protected:
    int value;
};

class Derived : public Base {
public:
    void setValue(int v) {
        value = v; // 可以访问基类的 protected 成员
    }
};

2.3 private(私有的)

  • 成员变量和函数只能被类本身访问
  • 不能被外部代码或派生类直接访问
class MyClass {
private:
    int secretValue;
public:
    void setSecretValue(int value) {
        secretValue = value; // 只能通过公共接口访问
    }
};

3. 成员变量与成员函数的特性

3.1 成员变量

  • 每个对象都有自己的成员变量副本(静态成员变量除外)
  • 可以在类内初始化(C++11 及以后)
  • 可以有不同的访问权限

3.2 成员函数

  • 成员函数可以访问类的所有成员(包括 private 成员)
  • 可以是普通成员函数、静态成员函数或常量成员函数
  • 可以被重载和重写

4. 常见问题和回答

问题 1:类和结构体有什么区别?

  • 默认访问控制:类的默认访问控制是 private,结构体的默认访问控制是 public
  • 默认继承方式:类的默认继承方式是 private,结构体的默认继承方式是 public
  • 语义区别:通常类用于表示对象,结构体用于表示简单的数据结构

问题 2:如何访问类的 private 成员?

可以通过以下方式访问: - 类的成员函数 - 友元函数或友元类 - 类的内部类

问题 3:访问控制关键字的作用是什么?

访问控制关键字用于实现封装思想,隐藏类的内部实现细节,只暴露必要的接口,提高代码的安全性和可维护性。


总结

类与对象是 C++ 面向对象编程的核心概念。通过访问控制关键字,我们可以实现封装思想,隐藏内部实现细节,只暴露必要的接口。这是设计良好的 C++ 类的基础。


练习建议: 1. 设计一个简单的 Rectangle 类,包含宽度和高度成员变量 2. 实现计算面积和周长的成员函数 3. 为成员变量设置适当的访问控制