导读:本期聚焦于小伙伴创作的《C++函数继承中继承访问权限是什么意思》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C++函数继承中继承访问权限是什么意思》有用,将其分享出去将是对创作者最好的鼓励。

在C++的面向对象编程中,函数继承是复用基类代码的重要方式,而继承访问权限直接决定了基类中的成员函数能否在派生类中被访问、被调用,是理解继承机制的核心知识点之一。

C++函数继承中继承访问权限是什么意思

什么是继承访问权限

继承访问权限指的是当派生类通过不同方式继承基类时,基类中原本的public、protected、private成员函数在派生类中的访问属性变化规则。C++支持三种继承方式:public继承、protected继承、private继承,不同的继承方式会改变基类成员在派生类中的可访问性,其中成员函数作为类的重要组成部分,同样受这套规则约束。

三种继承方式的访问规则

我们可以通过下面的表格快速梳理不同继承方式下,基类各类成员函数在派生类中的访问权限变化:

基类成员函数访问权限public继承后派生类中的权限protected继承后派生类中的权限private继承后派生类中的权限
publicpublicprotectedprivate
protectedprotectedprotectedprivate
private不可访问不可访问不可访问

public继承

public继承是最常用的继承方式,它遵循“is-a”的关系,派生类对象可以被当作基类对象使用。在这种继承方式下,基类的public成员函数在派生类中仍然是public的,派生类内部和外部都可以直接调用;基类的protected成员函数变为派生类的protected成员,只能在派生类内部和其子类中访问,外部无法直接调用;基类的private成员函数对派生类完全不可见,无法访问。

下面的代码演示了public继承的访问规则:

#include <iostream>
using namespace std;

// 基类
class Base {
public:
    void public_func() {
        cout << "Base public function" << endl;
    }
protected:
    void protected_func() {
        cout << "Base protected function" << endl;
    }
private:
    void private_func() {
        cout << "Base private function" << endl;
    }
};

// public继承派生类
class DerivedPublic : public Base {
public:
    void test() {
        public_func();       // 正确,基类public函数在派生类中仍为public,可访问
        protected_func();    // 正确,基类protected函数在派生类中为protected,类内可访问
        // private_func();   // 错误,基类private函数不可访问
    }
};

int main() {
    DerivedPublic dp;
    dp.public_func();        // 正确,派生类外部可调用public成员函数
    // dp.protected_func();  // 错误,protected成员函数外部不可访问
    return 0;
}

protected继承

protected继承下,基类的public和protected成员函数在派生类中都会变为protected权限,只能在派生类内部和其子类中访问,派生类外部无法直接调用;基类的private成员函数同样不可访问。这种继承方式通常用于“实现继承”场景,不希望派生类的对象被当作基类对象使用。

代码示例:

#include <iostream>
using namespace std;

class Base {
public:
    void public_func() {
        cout << "Base public function" << endl;
    }
protected:
    void protected_func() {
        cout << "Base protected function" << endl;
    }
};

// protected继承派生类
class DerivedProtected : protected Base {
public:
    void test() {
        public_func();       // 正确,基类public函数变为protected,类内可访问
        protected_func();    // 正确,基类protected函数仍为protected,类内可访问
    }
};

int main() {
    DerivedProtected drp;
    // drp.public_func();    // 错误,public_func在派生类中为protected,外部不可访问
    return 0;
}

private继承

private继承会将基类的public和protected成员函数都变为派生类的private成员,只能在派生类内部访问,派生类的子类和外部都无法访问;基类的private成员函数依然不可访问。这种继承方式相当于将基类的实现完全封装在派生类内部,通常用于组合替代继承的场景。

代码示例:

#include <iostream>
using namespace std;

class Base {
public:
    void public_func() {
        cout << "Base public function" << endl;
    }
protected:
    void protected_func() {
        cout << "Base protected function" << endl;
    }
};

// private继承派生类
class DerivedPrivate : private Base {
public:
    void test() {
        public_func();       // 正确,基类public函数变为private,类内可访问
        protected_func();    // 正确,基类protected函数变为private,类内可访问
    }
};

// 派生类的子类
class SubDerived : public DerivedPrivate {
public:
    void sub_test() {
        // public_func();    // 错误,public_func在DerivedPrivate中为private,子类不可访问
        // protected_func(); // 错误,protected_func在DerivedPrivate中为private,子类不可访问
    }
};

int main() {
    DerivedPrivate drp;
    // drp.public_func();    // 错误,public_func在派生类中为private,外部不可访问
    return 0;
}

继承访问权限的注意事项

  • 无论哪种继承方式,基类的private成员函数永远无法被派生类直接访问,只能通过基类提供的public或protected接口间接访问。
  • 继承访问权限只影响基类成员在派生类中的可访问性,不会改变基类自身的访问规则,基类内部依然可以正常访问自己的所有成员函数。
  • 如果派生类需要重写基类的函数,被重写的函数通常是基类的public或protected成员,private函数无法被重写,因为派生类根本看不到它。

理解继承访问权限的规则,能够帮助我们在设计类的继承关系时,合理选择继承方式,既保证代码的复用性,又能做好封装,避免不必要的访问暴露。

C++函数继承继承访问权限public继承protected继承private继承修改时间:2026-05-29 16:59:08

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。