一、前言
本部分为C++语言刷题系列中的第15节,主要讲解这几个知识点:派生类中名称的重定义。欢迎大家提出意见、指出错误或提供更好的题目!
二、知识点讲解
知识点1: 派生类中名称的重定义
1、在C++语言中,只要派生类定义了一个与基类同名的成员,则在派生类中访问此成员时,编译器默认就是派生类中重新定义的成员。
2、如果在派生类中想要访问基类定义的同名成员,则可以在成员前使用基类的作用域运行算符。
三、试题解析
1.有如下程序:
#include
using namespace std;
class Equipment
{
public:
void display() { cout<
};
class Computer: public Equipment
{
public:
void display()
{
___________________________________
cout<
}
};
void main()
{
Computer cs;
cs.display();
}
已知其执行后的输出结果为:
Equipment::display
Computer::display
则程序中横线处应填入的语句是()
A. Equipment.display();
B. Equipment->display();
C. Equipment::display();
D. display();
正确答案:C
解析:由输出结果可知,题意是想在横线处调用基类的display函数。而基类和派生类中都定义了函数名称为display的成员函数,因此使用使用基类的作用域运算符,所以C选项正确。
3.有如下程序,判断哪行语句出错,并改正。
#include
using namespace std;
class Base
{
public:
void test() { cout<
};
class Derived : public Base
{
public:
int test;
};
void main()
{
Derived d;
d.test();
}
正确答案:d.test();就错误的,可以修改成:d.Base::test();
解析:在派生类中重新定义了名称test,因此通过派生类对象使用test时,编译器默认是使用派生类的成员test。而在派生类中test为成员变量,因此编译出错。要想让d.test();编译正确,需要使用基类的作用域运算符,即修改成:d.Base::test();
四、试题测试
------------------------------
欢迎大家提出意见、指出错误或提供更好的题目,只有大家的共同努力,才能帮助更多人掌握C++的基本概念,顺利通过考试!