继承的基础概念

简介: 继承的基础概念

继承是C++中代码复用的重要的手段,通过继承,可以获得父类的所有功能;

子类就是一个特殊的父类;

子类对象可以直接初始化父类对象;

子类对象可以直接赋值给父类对象;


继承中的访问级别:

关键字protected的意义(为了继承专门设计的,没有protected就无法完成真正意义上的代码复用):

------修饰的成员不能被外界直接访问

------修饰的成员可以被子类直接访问

#include <iostream>
#include <string>
using namespace std;
class Parent
{
protected:
    int mv;
public:
    Parent()
    {
        mv = 100;
    }
    int value()
    {
        return mv;
    }
};
class Child : public Parent
{
public:
    int addValue(int v)
    {
        mv = mv + v;    
    }
};
int main()
{   
    Parent p;
    cout << "p.mv = " << p.value() << endl;
    // p.mv = 1000;    // error
    Child c;
    cout << "c.mv = " << c.value() << endl;
    c.addValue(50);
    cout << "c.mv = " << c.value() << endl;
    // c.mv = 10000;  // error
    return 0;
}

C++中支持三种不同方式的继承方式:

----public继承:父类成员在子类中保持原有的访问级别;

----private继承:父类成员在子类中变为私有成员

-----protected继承:父类中的公有成员变为保护成员,其他成员保持不变


继承方式确定公式:  继承成员的访问属性 = Max{  继承方式,父类成员访问属性 }  

       C++中的默认继承方式为private

#include <iostream>
#include <string>
using namespace std;
class Parent
{
protected:
    int m_a;
protected:
    int m_b;
public:
    int m_c;
    void set(int a, int b, int c)
    {
        m_a = a;
        m_b = b;
        m_c = c;
    }
};
class Child_A : public Parent
{
public:
    void print()
    {
        cout << "m_a" << m_a << endl;
        cout << "m_b" << m_b << endl;
        cout << "m_c" << m_c << endl;
    }
};
class Child_B : protected Parent
{
public:
    void print()
    {
        cout << "m_a" << m_a << endl;
        cout << "m_b" << m_b << endl;
        cout << "m_c" << m_c << endl;
    }
};
class Child_C : private Parent
{
public:
    void print()
    {
        cout << "m_a" << m_a << endl;
        cout << "m_b" << m_b << endl;
        cout << "m_c" << m_c << endl;
    }
};
int main()
{   
    Child_A a;
    Child_B b;
    Child_C c;
    a.m_c = 100;
    // b.m_c = 100;    // Child_B 保护继承自 Parent, 所以所有的 public 成员全部变成了 protected 成员, 因此外界无法访问
    // c.m_c = 100;    // Child_C 私有继承自 Parent, 所以所有的成员全部变成了 private 成员, 因此外界无法访问
    a.set(1, 1, 1);
    // b.set(2, 2, 2);
    // c.set(3, 3, 3);
    a.print();
    b.print();
    c.print();
    return 0;
}

一般而言,C++工程中只使用public继承

C++的派生语言只支持一种继承方式

相关文章
|
C语言 数据安全/隐私保护 C++
19 C++ - 类和对象的基本概念
19 C++ - 类和对象的基本概念
46 0
|
Java C++
C++进阶之继承(下)
在 C++ 中,友元关系是不继承的,这意味着基类的友元不能访问派生类的私有和保护成员。 如果一个类被声明为另一个类的友元,那么这个友元类可以访问该类的私有和保护成员。然而,这种访问权限不会被继承到派生类中。即使基类的成员函数被声明为子类的友元,也不能访问子类的私有和保护成员。
|
4月前
|
存储 编译器 C++
C++基础知识(六:继承)
多态是面向对象编程的四大基本原则之一,它让程序能够以统一的接口处理不同的对象类型,从而实现了接口与实现分离,提高了代码的灵活性和复用性。多态主要体现在两个层面:静态多态(编译时多态,如函数重载)和动态多态(运行时多态,主要通过虚函数实现)。
|
5月前
|
Java
继承基础知识
继承基础知识
18 0
|
6月前
|
存储 安全 Java
【C++进阶】1. 继承
【C++进阶】1. 继承
48 3
|
6月前
|
Java
Java面向对象编程,解释封装、继承和多态的概念。
Java面向对象编程,解释封装、继承和多态的概念。
78 2
|
安全 编译器 C++
C++进阶之继承(上)
在C++中,继承是一种面向对象编程的重要概念,它允许一个类(称为子类或派生类)从另一个类(称为父类、基类或超类)那里继承属性和行为。继承是实现代码重用、构建层次结构以及实现多态性的基础。
抽象类的基本概念
抽象类的基本概念
66 0
|
安全 C++
【C++ 进阶】继承
【C++ 进阶】继承
108 0
|
安全 Java 编译器
C++进阶】一、继承(总)
目录 一、继承的概念及定义 1.1 继承概念 1.2 继承定义 1.3 继承基类成员访问方式的变化 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 五、继承与友元 六、继承与静态成员 七、菱形继承及菱形虚拟继承 7.1 继承的分类 7.2 菱形虚拟继承 7.3 菱形虚拟继承原理 八、继承总结
82 0
C++进阶】一、继承(总)
下一篇
无影云桌面