C++ 为什么可以';我们不能在继承中更改基类中函数的访问级别吗?

C++ 为什么可以';我们不能在继承中更改基类中函数的访问级别吗?,c++,inheritance,polymorphism,C++,Inheritance,Polymorphism,在下面的代码中,如果基类派生为protected,则代码不起作用。为什么? 在继承具有虚拟函数的基类时,究竟何时使用保护和私有访问说明符? 另外,既然子类可以访问父类,为什么基类的指针不能指向它的父类? 通过以下代码理解这些问题 #include<iostream> using namespace std; class A { public: virtual void show() { cout<<"In A"<<endl;

在下面的代码中,如果基类派生为protected,则代码不起作用。为什么? 在继承具有虚拟函数的基类时,究竟何时使用保护和私有访问说明符? 另外,既然子类可以访问父类,为什么基类的指针不能指向它的父类? 通过以下代码理解这些问题

#include<iostream>
using namespace std;

class A
{
public:
    virtual void show()
    {
    cout<<"In A"<<endl;
    }
};
class B:public A//--QUESTION-----Making A protected is giving an error. Why?
{
public:
//protected: works..
    void show()
    {
        cout<<"In B"<<endl;
    }
};
class C : public B//Making B protected is giving an error. Why?
{
public:
     void show()
    {
        cout<<"In C"<<endl;
    }
};
int main()
{
    A obj1;
    B obj2;
    C obj3;
    A *obj;
    B *objp;
    C *objp3;
    obj=&obj2;
    obj->show();

    /*The following 4 lines also do not work. Since a child class has access to parent class, why can't a pointer of base class point to its parent class?*/
    //objp3=&obj2;
    //objp3->show();
    objp=&obj1;
    objp->show();
}
#包括
使用名称空间std;
甲级
{
公众:
虚拟虚空显示()
{

cout如果您通过
protected
导出
A
,那么您正在将class
A
具有
public
的所有内容设置为
protected

class B:protected A
{
public:
//protected: works..
    void show()
    {
        cout<<"In B"<<endl;
    }
};
B类:受保护的A类
{
公众:
//受保护:工作。。
无效显示()
{

下面的问题和答案有什么不清楚的吗?但是我们可以超越变量的访问级别,那么为什么不能超越函数的访问级别呢?