面试题答案
一键面试- 编译及输出结果:
- 这段代码编译不会报错。输出结果为:
2 1
- 作用域解析过程:
std::cout << var << std::endl;
:- 在
Derived
类的printVar
成员函数中,当访问var
时,首先在Derived
类的作用域内查找。因为Derived
类中定义了int var = 2;
,所以这里输出的是2
。这符合C++的作用域查找规则,即从最内层作用域(这里是printVar
函数体)开始查找,然后向外层作用域(Derived
类作用域)查找。
- 在
std::cout << T::var << std::endl;
:- 这里通过
T::var
访问的是模板参数T
(即Base
类)中的var
成员变量。因为Derived
类继承自T
(Base
类),Base
类中定义了int var = 1;
,所以这里输出的是1
。这种通过类名限定符::
来访问基类成员的方式,明确指定了要访问的是基类作用域中的成员,避免了与派生类同名成员的冲突。
- 这里通过