C++ 进阶面试题, C++设计模式
C++ 进阶面试题, C++设计模式
QA
Step 1
Q:: 请解释C++
中的多态性,并举例说明如何实现。
A:: 多态性是面向对象编程的重要特性之一,它允许一个接口可以有多种实现。在C++中,多态性通常通过继承和虚函数来实现。例如,一个基类Shape有一个虚函数draw(),而派生类Circle和Square可以分别实现这个函数。当通过基类指针调用draw()
函数时,将根据指针实际指向的对象类型调用相应的函数实现。代码如下:
class Shape {
public:
virtual void draw() const = 0;
};
class Circle : public Shape {
public:
void draw() const override {
std::cout << "Drawing Circle" << std::endl;
}
};
class Square : public Shape {
public:
void draw() const override {
std::cout << "Drawing Square" << std::endl;
}
};
void DrawShape(const Shape& shape) {
shape.draw();
}
int main() {
Circle circle;
Square square;
DrawShape(circle);
DrawShape(square);
return 0;
}
输出结果为:
Drawing Circle
Drawing Square
Step 2
Q:: 请描述C++
中的RAII(资源获取即初始化)模式,并举例说明。
A:: RAII(Resource Acquisition Is Initialization)是一种C++
编程惯用法,它通过对象的生命周期来管理资源,确保资源的分配与释放紧密结合。使用RAII,资源在对象创建时获取,并在对象销毁时释放,从而避免资源泄漏。典型的RAII实现是通过智能指针管理动态分配的内存。
例如:
#include <iostream>
#include <memory>
class Resource {
public:
Resource() { std::cout << "Resource acquired" << std::endl; }
~Resource() { std::cout << "Resource released" << std::endl; }
};
int main() {
{
std::unique_ptr<Resource> ptr = std::make_unique<Resource>();
// Resource is being used
} // ptr goes out of scope and Resource is automatically released here
return 0;
}
输出结果为:
Resource acquired
Resource released
这个例子中,当ptr
超出作用域时,Resource
对象被自动释放。
Step 3
Q:: 解释C++
中的设计模式,举例说明如何在代码中应用某个设计模式。
A:: 设计模式是解决特定问题的可复用解决方案。在C++
中,常见的设计模式包括单例模式、工厂模式、观察者模式等。以单例模式为例,它确保一个类只有一个实例,并提供一个全局访问点。
例如:
class Singleton {
private:
static Singleton* instance;
Singleton() {} // 私有化构造函数
public:
static Singleton* getInstance() {
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
};
Singleton* Singleton::instance = nullptr;
在这个例子中,getInstance()
函数确保了Singleton
类的唯一实例。
用途
这些面试内容是为了评估候选人对C`++核心概念和实践的掌握程度,尤其是在实际生产环境中,编写高效、安全且可维护的代码的能力。多态性、RAII和设计模式是C++`开发中的重要概念,它们帮助开发者管理复杂的系统,确保代码的可扩展性、健壮性和资源管理效率。例如,在大型系统中,设计模式有助于实现代码的模块化和重用,RAII确保资源安全地分配和释放,避免内存泄漏和资源竞争。\n相关问题
🦆
什么是C++中的智能指针?它与普通指针有什么区别?▷
🦆
请解释C++中的虚函数表Vtable以及它的作用.▷
🦆
C++11新增了哪些特性?其中哪些特性在实际开发中最为常用?▷