首页 > 试题广场 >

下列说法错误的是()

[不定项选择题]
下列说法错误的是()
  • 派生类不能访问通过私有继承的基类的保护成员
  • 多继承的虚基类不能够实例化
  • 如果基类没有默认构造函数,派生类就应当声明带形参的构造函数
  • 基类的析构函数和虚函数都不能够被继承,需要在派生类中重新实现
A选项中,派生类无论是public、protected、private继承,都能够访问和修改基类的public和protected成员,而派生类对象仅当public继承时才能够访问和修改基类成员,因此在基类中定义的protected成员在私有继承的派生类中可访问可修改的,A错误
B选项中,虚基类是用来避免多继承带来的二义性问题,即:派生类从同一个基类,沿不同继承方向,得到多个相同的拷贝,此时派生类不知道要访问哪一个。虚基类能够让公共基类只产生一个拷贝,即只对第一个调用的有效,对其他的派生类都是虚假的,可以认为虚基类只实例化一次,而派生类也只得到一套虚基类的成员,B错误
C选项正确,如果基类没有默认构造函数,派生类中的构造函数必须显式地调用基类的带参构造函数
D选项中,析构函数不能够被继承,但是虚函数不仅能够被派生类继承,还能够被派生类改写,D错误
编辑于 2019-08-02 20:47:27 回复(6)
一开始不明所以,看到多继承就猜到是你了顺丰。
发表于 2019-08-07 09:06:33 回复(1)
下列说法错误的是()
  • 派生类不能访问通过私有继承的基类的保护成员
  • 多继承的虚基类不能够实例化
  • 如果基类没有默认构造函数,派生类就应当声明带形参的构造函数
  • 基类的析构函数和虚函数都不能够被继承,需要在派生类中重新实现
A选项:题中没有清楚,是派生类的类内,还是类外。如果是类外,派生类对象是不能访问基类的保护成员。但是类外,派生类对象是可以访问的。
B选项:多继承的虚基类与实例化无关系。虚基类是派生类虚继承基类,此时基类称为虚基类。不能实例化是抽象类不能实例化,也就是含有纯虚函数的类不能实例化。因此错误。
C选项:基类没有默认构造寒素,构造派生类对象时,可以通过初始化列表调用基类的默认构造或者有参构造,与派生类是否声明有参构造无关。
D选项:析构函数不能被继承,虚函数是virtual修饰的成员函数,能够被继承,与它是不是虚函数无关。
编辑于 2023-05-10 23:10:19 回复(0)

顺丰牛bi

发表于 2019-08-23 02:33:17 回复(0)
C选项,就算基类没有默认的构造函数,编译器也可能给基类合成啊。。。
发表于 2021-05-09 10:27:55 回复(0)
默认构造函数,就是调用构造函数时,不必给出实参的构造函数。
发表于 2020-04-13 22:48:34 回复(0)
😃
发表于 2019-08-09 20:31:27 回复(0)
c有点考语文了,基类的默认构造函数被delete,派生类构造函数必须主动调用带形参的基类构造函数。声明的时候应该derive():base(参数)。当然derive也可以带参
发表于 2024-04-28 13:45:24 回复(0)
A:类内对象可以访问,类外对象不行
发表于 2023-10-24 17:54:16 回复(0)
private成员不管什么继承方式,派生类不可见(只能通过其他父类函数接口访问),其他两类成员(public成员,protected成员),和继承方法取权限小的
发表于 2023-10-23 23:23:10 回复(0)
A: 派生类不能访问通过私有继承的基类的保护成员
我一开始理解的是 私有继承后,public、private、protected都转换为 private 成员了,那派生类就是不能访问,为什么说错了呢
经常看到这种表


用代码试了一下,在派生类中,的确是“无论是public、protected、private继承,都能够访问和修改基类的public和protected成员”,所以我想上表的意思,应该是针对 派生类对象。
发表于 2022-01-27 15:35:03 回复(1)

C 选项是不对的

#include<iostream>
using std::cout;
using std::endl;
class Base{

    public:
    Base(int test){cout<< "base"<<endl;};
    virtual void test()=0;
    private:
    int m_a;
};

class Der:public Base{
    public:
    int m_b;
    Der():Base(0), m_b(1){cout<<"der"<<endl;};
    void test(){cout<<"der test"<<endl;}
};
int main(){
    Der test;
}

可以明确的看到,基类无默认构造,派生类同样也没有,可以正常的构造出基类。
选项中描述的是应该:如果从工程角度来看,也要结合不同的场景的,所以这个选项说起来是真的太过牵强了

发表于 2021-02-22 13:10:05 回复(1)
就想知道a这种说法有人见过吗?
发表于 2021-01-08 21:39:54 回复(0)
这个答案有点扯
发表于 2020-10-15 00:03:08 回复(0)
**顺风,已屏蔽?
发表于 2020-09-16 19:31:09 回复(0)
我c++白学了
发表于 2019-09-03 22:36:21 回复(0)
我想问问这个题目怎么了,怎么(゚o゚;这么多人吐槽😬
发表于 2019-08-28 21:42:54 回复(0)
派生类可以访问通过私有继承的基类的保护成员,多继承的虚基类可以实例化,如果基类没有默认构造函数派生类就应当声明带形参的构造函数。
发表于 2019-08-21 11:48:12 回复(0)
顺丰真的有Java工程师吗?
发表于 2019-08-20 17:22:37 回复(0)
看到虚基类就知道是顺丰的了
发表于 2019-08-18 20:06:13 回复(0)