c++继承和派生的权限


class base
{
public:
    int base_public;
private:
    int base_private;
protected:
    int base_protected;
};
class derived :protected  base
{
public:
    void access() {
        base_public = 1;
        base_protected = 2;
        
    }
};

派生类中的public声明是不是没有意义?不管是不是public,派生类中的成员都是protected权限?

有用,不是的 基类如果是 public 如果派生类 public继承,public成员可以在外部调用

derived d;
d.base_public;

派生类继承了基类的成员,在派生类中可以访问基类中的公有成员和保护成员。派生类可以通过不同的方式来继承基类的成员,包括公有继承、私有继承和保护继承。

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/273589
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:C++共有型派生(public)和私有型派生的区别(private)
  • 除此之外, 这篇博客: c++中继承知识点详解中的 继承与转换–赋值兼容规则–public继承 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    1. 子类对象可以赋值给父类对象(切割/切片)
    2. 父类对象不能赋值给子类对象
    3. 父类的指针/引用可以指向子类对象
    4. 子类的指针/引用不能指向父类对象(可以通过强制类型转换完成)
    class Person
    {
    public:
        void Display()
        {
            cout << "AA" << endl;
        }
    protected:
        string _name; // 姓名
    };
    class Student : public Person
    {
    public:
        int _num; // 学号
    };
    
    int main()
    {
        Person a;
        Student b;
        a = b; //子类对象赋值给基类对象(切片)这个特性是编译器支持的
        b = a; //父类对象不能赋值给子类对象
    
        Person *p1 = &b; //特性3
        //Person &a1 = b; //特性3
        Student *p2 = (Student*)&a; //特性4
        Student& b1 = (Student&)a; //特性4
        getchar();
        return 0;
    }
  • 以下回答由chatgpt基于相关博客总结生成:

    在C++中,派生类中的public声明具有重要意义。派生类中的public声明可以继承基类的公有成员,并且这些成员可以被派生类的对象访问。无论是在派生类中声明成员变量还是成员函数,它们的访问权限都会被限制为protected。这意味着派生类的成员变量和成员函数可以被派生类的对象和派生类的其他成员函数访问,但不能被派生类对象外部的代码直接访问。

    以下是一个示例代码来说明派生类中的权限问题:

    #include <iostream>
    
    class Base {
    protected:
        int protectedVar;
    private:
        int privateVar;
    
    public:
        int publicVar;
    };
    
    class Derived : public Base {
    public:
        void print() {
            std::cout << protectedVar << std::endl;  // 可以访问派生类继承的protected变量
            std::cout << privateVar << std::endl;    // 错误!派生类无法访问基类的私有变量
            std::cout << publicVar << std::endl;     // 可以访问派生类继承的public变量
        }
    };
    
    int main() {
        Derived derived;
        derived.print();
        return 0;
    }
    

    在这个示例中,派生类Derived继承了基类Base。在Derived的print函数中,我们可以直接访问派生类继承的protected变量和public变量。但是,派生类无法访问基类的私有变量。

    总结一下,无论何种访问权限在派生类中声明成员变量或成员函数,它们的访问权限都会被限制为protected。但是,派生类可以继承基类的公有成员,并且这些成员可以被派生类的对象访问。如果想要在派生类中访问基类的私有成员,可以使用基类的公有或保护方法来访问。