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. 为成员变量设置适当的访问控制