小编Nox*_*Nox的帖子

对继承基类的成员使用指定初始化程序

Something我创建了一个包含成员变量的类。

我能够做到这一点,它按预期工作:

struct Something
{
    bool Works;
};

int main()
{
    Something s = {
        .Works = false,
    };
}
Run Code Online (Sandbox Code Playgroud)

现在,我想创建一个继承自Something、named的结构Something2,并想做同样的事情,但我希望能够访问Something::Works(我将其重命名为DoesntWork,因为它不起作用!):

struct Something
{
    bool DoesntWork;
};

struct Something2 : public Something
{
    bool Works;
};


int main()
{
    Something2 s2 = {
        .Works = true,
        .DoesntWork = false,
    };
}
Run Code Online (Sandbox Code Playgroud)

https://godbolt.org/z/rYT3br467

我不是在寻找替代方案,我已经想到了一些。我只是想知道这是否可能,如果可以,那么如何实现。

如果不可能,我真的很想知道低级原因,所以不要犹豫!

更新:感谢 Nathan Oliver 的评论,您可以阅读:Designatedinitializer in C++20

c++ parameters named

5
推荐指数
1
解决办法
928
查看次数

C++ 从父级调用子函数

我试图从父级调用一个覆盖函数,发现它只是崩溃了。

这很难描述,所以这里是最小的可重现代码:

#include <iostream>

class A
{
public:
    A()
    {
        init1();
    }
    
    void init1()
    {
        printf("1");
        init2();
        printf("2");
    }

    virtual void init2() = 0;
};

class B : public A
{
public:
    B()
    : A()
    {}

    void init2() override
    {
        printf("hello");
    }
};

int main()
{
    B b;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在 MSVC 2019 上它崩溃了,在http://cpp.sh/ 上它输出“1”然后main()返回 0,但我们从未看到"hello""2"

  1. 为什么会崩溃?从低层次的角度来看会发生什么?是A试图调用它自己的init2()吗?

  2. 有没有办法做到这一点,所以我不必在每个派生类中添加init2()其构造函数?

c++ class

-3
推荐指数
1
解决办法
62
查看次数

标签 统计

c++ ×2

class ×1

named ×1

parameters ×1