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
我试图从父级调用一个覆盖函数,发现它只是崩溃了。
这很难描述,所以这里是最小的可重现代码:
#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"
。
为什么会崩溃?从低层次的角度来看会发生什么?是A
试图调用它自己的init2()
吗?
有没有办法做到这一点,所以我不必在每个派生类中添加init2()
其构造函数?