MST

星途 面试题库

面试题:C++中class与struct在继承方式默认规则及影响

当使用class和struct进行继承时,默认的继承方式分别是什么?这种默认继承方式对基类成员在派生类中的访问权限有何影响?请通过代码示例详细阐述。
48.5万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 默认继承方式
    • 在C++中,使用class进行继承时,默认的继承方式是私有继承(private)。
    • 使用struct进行继承时,默认的继承方式是公有继承(public)。
  2. 对基类成员访问权限的影响
    • 公有继承(public:基类的公有成员在派生类中仍然是公有成员,基类的保护成员在派生类中仍然是保护成员。例如:
struct Base {
    public:
        int publicMember;
    protected:
        int protectedMember;
};
struct Derived : public Base {
    void accessMembers() {
        publicMember = 10;
        protectedMember = 20;
    }
};
  • 私有继承(private:基类的公有成员和保护成员在派生类中都变成私有成员。例如:
class Base {
    public:
        int publicMember;
    protected:
        int protectedMember;
};
class Derived : Base { // 默认为private继承
    void accessMembers() {
        publicMember = 10;
        protectedMember = 20;
    }
};
  • 保护继承(protected,这里仅为完整说明,不是默认方式):基类的公有成员在派生类中变成保护成员,基类的保护成员在派生类中仍然是保护成员。例如:
class Base {
    public:
        int publicMember;
    protected:
        int protectedMember;
};
class Derived : protected Base {
    void accessMembers() {
        publicMember = 10;
        protectedMember = 20;
    }
};

在以上代码示例中,accessMembers函数可以访问基类中相应访问权限的成员,体现了不同继承方式对基类成员在派生类中访问权限的影响。需要注意的是,通过Derived类的对象,在类外部只能访问Derived类从Base类以public继承过来的public成员(如果有的话)。例如:

int main() {
    Derived d;
    // d.publicMember = 30; // 若Derived是private或protected继承自Base,此行编译错误
    return 0;
}