C++继承与派生——访问控制和类型兼容

访问控制

C++中的不同的继承方式有不同的访问控制。C++中的继承方式分为三种:公有继承、私有继承和保护继承。

公有继承

基类的公有成员和保护成员的访问属性在派生类中不变,基类的私有成员不可直接访问

私有继承

基类的公有成员和保护成员的访问属性在派生类为派生类的私有成员,基类的私有成员不可直接访问

保护继承

基类的公有成员和保护成员的访问属性在派生类为派生类的保护成员,基类的私有成员不可直接访问

类型兼容

类型兼容规则

在任何需要基类对象的地方,都可以使用公有派生类的对象来替
在替代之后,派生类对象就可以当做基类对象来使用,但只能使用从基类继承过来的成员

替代情况
class B{...}
class D:public B{...}
B b1,*pb1;
D d1;
  1.派生对象可以隐含的转换为基类对象
    b1 = d1;
  2.派生对象也可以初始化基类对象的引用
    B &b1 = d1;
  3.派生对象的地址也可以隐含的转换为基类对象的指针
    pb1 = &d1;
类型兼容规则实例 情况3示例
#include <iostream>
#include <cstdlib>
using namespace std;

class Base1//基类Base1定义
{
public:
    void display() const
    {
        cout << "Base1::display()" << endl;
    }
};
class Base2 :public Base1//公有派生类Base2定义
{
public:
    void display() const
    {
        cout << "Base2::display()" << endl;
    }
};

class Derived :public Base2//公有派生类Derived定义
{
public:
    void display() const
    {
        cout << "Derived::display()" << endl;
    }
};

void fun(Base1 * ptr)//参数为指向基类的指针
{
    ptr->display();
}

int main(int argc, char * argv[])
{
    Base1 base1;//声明对象
    Base2 base2;
    Derived derived;
    fun(&base1);
    fun(&base2);
    fun(&derived);
    system("pause");
    return 0;
}

执行结果

Base1::display()
Base1::display()
Base1::display()

翻阅以前C++学习笔记,整理一些摘要。

猜你喜欢

转载自blog.csdn.net/renzhadebenyuan/article/details/80419498
今日推荐