C++ 常见面试题
发布人:shili8
发布时间:2025-01-18 01:57
阅读次数:0
**C++ 常见面试题**
作为一名程序员,面试是每个人的必经之路。以下是一些常见的 C++ 面试题,包括一些代码示例和注释。
###1.什么是指针?
**答案:**
在 C++ 中,指针是一个变量,它存储的是一个内存地址,而不是实际的值。通过使用指针,可以间接访问和操作内存中的数据。
**示例代码:**
cppint x =10; int* p = &x; // p 是 x 的指针// 使用指针访问 x 的值cout << *p << endl; // 输出10
注释:`&` 运算符用于获取一个变量的地址,`*` 运算符用于解引用一个指针。
###2.什么是类和对象?
**答案:**
在 C++ 中,类是一种用户定义的数据类型,它可以包含成员变量(属性)和成员函数(方法)。对象是类的一个实例,它具有自己的状态和行为。
**示例代码:**
cppclass Person { public: string name; int age; void sayHello() { cout << "Hello, my name is " << name << " and I am " << age << " years old." << endl; } }; int main() { Person p1; // 创建一个 Person 对象 p1.name = "John"; p1.age =30; p1.sayHello(); // 输出 "Hello, my name is John and I am30 years old." return0; }
注释:`class` 关键字用于定义一个类,`public:` 块用于声明类的公共成员。
###3.什么是构造函数和析构函数?
**答案:**
在 C++ 中,构造函数是一个特殊的成员函数,它用于初始化一个对象的状态。当一个对象被创建时,会自动调用其构造函数。析构函数也是一个特殊的成员函数,它用于释放一个对象占用的资源,当一个对象被销毁时,会自动调用其析构函数。
**示例代码:**
cppclass Person { public: string name; int age; // 构造函数 Person(string n, int a) : name(n), age(a) {} // 析构函数 ~Person() { cout << "Person object destroyed." << endl; } }; int main() { Person p1("John",30); // 调用构造函数 return0; }
注释:`:` 运算符用于初始化一个成员变量,`~` 运算符用于声明析构函数。
###4.什么是运算符重载?
**答案:**
在 C++ 中,运算符重载是一种机制,它允许用户定义类的运算符(如 `+`, `-`, `*`, `/`) 的行为。通过重载运算符,可以使类的对象能够使用这些运算符进行操作。
**示例代码:**
cppclass Complex { public: double real; double imag; // 构造函数 Complex(double r, double i) : real(r), imag(i) {} // 重载加法运算符 Complex operator+(const Complex& c) const { return Complex(real + c.real, imag + c.imag); } }; int main() { Complex c1(3.0,4.0); Complex c2(2.0,5.0); Complex result = c1 + c2; // 调用重载的加法运算符 return0; }
注释:`operator+` 是一个友元函数,它用于重载 `+` 运算符。
###5.什么是多态性?
**答案:**
在 C++ 中,多态性是一种机制,它允许不同类型的对象共享相同的接口和行为。通过使用虚函数,可以使类的派生类能够重载其父类的成员函数。
**示例代码:**
cppclass Shape { public: virtual void draw() =0; // 虚函数 // 构造函数 Shape() {} }; class Circle : public Shape { public: void draw() override { cout << "Drawing a circle." << endl; } }; class Rectangle : public Shape { public: void draw() override { cout << "Drawing a rectangle." << endl; } }; int main() { Shape* shapes[2] = {new Circle(), new Rectangle()}; // 创建一个 Shape 对象数组 for (Shape* shape : shapes) { // 使用多态性访问各个对象的 draw 函数 shape->draw(); } return0; }
注释:`virtual` 关键字用于声明虚函数,`=0` 表示该函数必须在派生类中重载。
以上就是一些常见的 C++ 面试题和示例代码。通过理解这些概念和机制,可以帮助你更好地掌握 C++ 的基础知识和高级特性。