基类成员的public访问权限在派生类中变为_C++学习刷题15--派生类名称的重定义、访问基类被重定义的成员...

一、前言

本部分为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++的基本概念,顺利通过考试!

4608b6256beea3ac00565e308452adc3.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值