MST

星途 面试题库

面试题:C++模板类对象成员初始化与继承体系的交互

假设存在一个继承体系,基类有特定的初始化要求,在派生类是模板类且包含对象成员的情况下,描述对象成员初始化和基类初始化之间的关系,并编写代码验证。
23.6万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

关系描述

在这种情况下,首先会进行基类的初始化,然后再进行对象成员的初始化。这是因为基类是派生类的基础,必须先完成初始化以确保派生类有正确的基础状态,之后再初始化派生类自身的对象成员。

代码验证

#include <iostream>

// 基类
class Base {
public:
    int baseValue;
    Base(int value) : baseValue(value) {
        std::cout << "Base class constructor, baseValue = " << baseValue << std::endl;
    }
};

// 模板派生类,包含对象成员
template<typename T>
class Derived : public Base {
public:
    T member;
    Derived(int baseVal, const T& obj) : Base(baseVal), member(obj) {
        std::cout << "Derived class constructor, member value = " << member << std::endl;
    }
};

int main() {
    Derived<int> d(10, 20);
    return 0;
}

在上述代码中,Derived 类继承自 Base 类,并且包含一个模板类型的对象成员 member。在 Derived 的构造函数中,先调用 Base 类的构造函数进行基类初始化,再初始化对象成员 membermain 函数中创建 Derived<int> 对象时,可以观察到先输出基类构造函数的信息,再输出派生类构造函数中关于对象成员初始化的信息,从而验证了这种初始化顺序。