gpt4 book ai didi

c++ - 在调用基类构造函数之前执行代码

转载 作者:行者123 更新时间:2023-11-30 01:09:31 25 4
gpt4 key购买 nike

class Base {
public:
Base(int a, int b);
};

class Derived : public Base {
private:
static std::pair<int, int> determine_a_and_b_(int k);
public:
explicit Derived(int k);
};

Derived::Derived(int k) :
// a, b from determine_a_and_b_(k)...
Base(a, b) { }

有没有办法在Derived的构造函数中调用determine_a_and_b_,得到值ab,在调用 Base::Base 之前?

似乎唯一的办法就是重构Base,这样它就可以先默认构造成一个空对象,然后用ab 之后,喜欢

Derived::Derived(int k) : Base() {
Base::init_(a, b);
}

有没有更好的方法来做到这一点,而不需要改变 Base

编辑 - 使determine_a_and_b_静态化

最佳答案

您在这里可以做的是编写一个返回 Base 的函数,并在该函数中根据 determine_a_and_b_< 返回的 std::pair 创建基数。这允许您有条件地初始化成员初始化列表中的 base。你会有类似的东西

class Base {
public:
Base(int a, int b);
};

class Derived : public Base {
private:
static std::pair<int, int> determine_a_and_b_(int k);
static Base create_base(const std::pair<int, int>& params) { return Base(params.first, params.second); }
public:
explicit Derived(int k);
};

Derived::Derived(int k) : Base(create_base(determine_a_and_b_(k)) {}

关于c++ - 在调用基类构造函数之前执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40223295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com