interview
advanced-c
C设计模式

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++中的一种封装了原生指针的类,能够自动管理指针的生命周期。与普通指针不同,智能指针在不再需要时自动释放所指向的内存,避免了内存泄漏问题。常见的智能指针包括std::unique_ptr、std::shared_ptr和std::weak_ptr。

🦆
请解释C++中的虚函数表Vtable以及它的作用.

虚函数表是C++实现多态性的重要机制。它是一个指针数组,存储了类的虚函数地址。当一个类包含虚函数时,编译器会为该类生成虚函数表,并在对象中存储一个指向该表的指针。通过该指针,可以在运行时动态调用正确的函数实现。

🦆
C++11新增了哪些特性?其中哪些特性在实际开发中最为常用?

C++11引入了很多新特性,如自动类型推导(auto)、基于范围的for循环、Lambda表达式、智能指针(std::unique_ptr和std::shared_ptr)、右值引用和移动语义等。这些特性大大增强了C++的表达力和性能,使得代码更简洁高效。最常用的特性包括智能指针、Lambda表达式和自动类型推导。