If ie.document.querySelectorAll(".list-tabs--secondary").length > 0 Then
'championship tab present
'switch to main
ie.document.querySelector("#sm-0-0 a").click 'or >
ie.document.querySelector(".list-tabs--secondary a").click
Else
'Championship tab is not present
End If
此代码无法编译...即使在结构B的公共部分中使用“使用A :: A”,B仍然没有接受int的公共构造函数(但它具有受保护的int)。
似乎:
我可以使用'using'继承公共构造函数
我可以将派生类中任何在基类中定义的方法(私有或受保护的方法)重新声明为公共方法
但是我不能对构造函数做同样的事情:无法通过'using'改变其可见性
为什么?
答案 0 :(得分:4)
这是故意的。请注意,A::A
继承了每个构造函数,而不仅是您期望的构造函数。将using
的access修饰符应用于每个继承的构造函数可能会太遥不可及。相反,它只是使它们可用于过载解析。
来自cppreference:
如果 using-declaration 引用的是所定义类的直接基础的构造函数(例如
using Base::Base;
),则该基础的所有构造函数(忽略成员访问)均可见初始化派生类时要重载解析。如果重载分辨率选择了一个继承的构造函数,则在用于构造相应基类的对象时是否可以访问它是可以访问的:引入的using-声明的可访问性它会被忽略。
如果要在构造A::A(int)
时调用B
,则可以自己实现B::B(int)
以便调用它。
答案 1 :(得分:4)
来自cppreference:
如果重载解析选择了一个继承的构造函数,则在构造相应基类的对象时可以访问它,如果可以访问它,则可以访问它:引入它的using声明的可访问性将被忽略。
一个可能的理由是,构造函数通常具有不同的可访问性,这很关键,而using声明没有提供区分它们的方法,如果使用了使用时的可访问性,则它们将具有相同的可访问性。 / p>
答案 2 :(得分:1)
如果using
声明的当前访问说明符更改了“继承的”构造函数的访问说明符,那么将没有办法让单独的“继承的”构造函数具有不同的访问说明符。
如果基类确实具有多个具有不同访问权限的构造函数,则通常希望可访问性保留在派生类中。 using
的规则使这成为可能。