我有一个继承自B类的A类。所以A类的接口包含一些B类的纯虚函数和A类的一些函数。现在我需要为A类进行单元测试,所以想拥有我可以模拟的A类接口。 所以现在我想知道给定的代码在C ++ 14中是否正确并且它是否可以导致UB:
import re
data = """
a.b.c
a."b.c".d
a.'b.c'.d
a.'b c'.d
"""
rx = re.compile(r"""(["']).*?\1|(?P<dot>\.)""")
needle = "SUPERMAN"
def replacer(match):
if match.group('dot') is not None:
return needle
else:
return match.group(0)
for line in data.split("\n"):
if line:
line = rx.sub(replacer, line)
parts = [part.strip("'").strip('"') for part in line.split(needle) if part]
print(parts)
答案 0 :(得分:3)
是的,此代码格式正确,void func()
会覆盖A::func()
和B::func()
。从C ++ 14标准:
[class.virtual]
- 如果在a中声明了虚拟成员函数
vf
直接或间接派生的class Base
和class Derived
来自Base
,具有相同名称的成员函数vf
, 参数类型列表(8.3.5),cv-qualification和ref-qualifier(或 声明为Base::vf
,但Derived::vf
也是如此 虚拟(无论是否如此声明)并覆盖它Base::vf
。