C++继承机制

简介: C++继承机制

C++继承机制


目录

继承

继承基本语法

继承方式

构造和析构顺序

同名成员处理

多继承语法

菱形继承

继承

下级别的成员拥有上一级的共性,还有自己的特性

继承基本语法

子类也称为派生类

父类也称为基类

#include<iostream>
using namespace std;
class BasePage{
public:
    void header(){
        cout <<"首页,公开课,登录,注册,"<<endl; 
    } 
    void footer(){
        cout <<"帮助中心,合作交流"<<endl;
    }
    void left(){
        cout <<"Java,Python,C++,网络安全与运维"<<endl; 
    }
};
class Java:public BasePage{
public:
    void content(){
        cout <<"Java学科视频"<<endl; 
    }
}; 
int main(){
    cout <<"Java下载视频页面如下"<<endl; 
    Java ja;
    ja.header();
    ja.left();
    ja.footer();
    ja.content();
    return 0;
} 

继承方式

public

protected

private

父类private的内容任何继承都拿不到

在private继承中继承的内容都变为private

在protected继承中的内容都变为protected

构造和析构顺序

#include<iostream>
using namespace std;
class Base{
public:
    Base(){
        cout <<"Base构造"<<endl;
    }
    ~Base(){
        cout <<"Base析构"<<endl; 
    }
};
class Son:public Base{
public: 
    Son(){
        cout <<"Son构造"<<endl; 
    }
    ~Son(){
        cout <<"Son析构"<<endl; 
    }
};
void test01(){
    Son s;
}
int main(){
    test01();
    return 0;
}

同名成员处理

有同名不加修饰的调用的是子类的

#include<iostream>
using namespace std;
class Base{
public:
    Base(){
        m_A=100;
    }
    int m_A;
};
class Son:public Base{
public: 
    Son(){
        m_A=200;
    }
    int m_A;
};
void test01(){
    Son s;
    cout <<s.m_A<<endl;
    cout <<s.Base::m_A<<endl; 
}
int main(){
    test01();
    return 0;
}
#include<iostream>
using namespace std;
class Base{
public:
    void func(){
        cout <<"Base的func调用"<<endl; 
    } 
};
class Son:public Base{
public: 
void func(){
        cout <<"Son的func调用"<<endl; 
    } 
};
void test01(){
    Son s;
    s.func();
    s.Base::func();
}
int main(){
    test01();
    return 0;
}

多继承语法

class 子类:继承方式 父类1,继承方式 父类2{ }

多继承可能会引发父类中的同名成员出现,需要加作用域区分

#include<iostream>
using namespace std;
class Base1{
public:
    Base1(){
        m_A=100;
    }
    int m_A;
};
class Base2{
public:
    Base2(){
        m_B=200;
    }
    int m_B;
};
class Son:public Base1,public Base2{
public:
    int m_C;
    int m_D; 
}; 
void test01(){
}
int main(){
    test01();
    return 0;
}

菱形继承

两个派生类继承同一个基类

又有某个类同时继承了这两个派生类

这种继承被称为菱形继承,或者钻石继承

当出现菱形继承的时候,两个父类拥有相同的数据,需要加以作用域区分

利用虚继承 解决菱形继承的问题

#include<iostream>
using namespace std;
class Animal{
    public:
        int m_Age;
};
class Sheep:virtual public Animal{
};
class Camel:virtual public Animal{
};
class alpaca:public Sheep,public Camel{
}; 
int main(){
    alpaca a;
    a.Sheep::m_Age=28;
    a.Camel::m_Age=18;
    cout <<a.Sheep::m_Age<<endl;
    cout <<a.Camel::m_Age<<endl;
    return 0;
} 


相关文章
|
19天前
|
安全 程序员 编译器
【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则
【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则
70 11
|
19天前
|
安全 测试技术 C++
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化2
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化
51 6
|
19天前
|
安全 测试技术 C++
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化1
【C++篇】从零实现 C++ Vector:深度剖析 STL 的核心机制与优化
40 7
|
17天前
|
C++
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
49 1
|
17天前
|
C++
C++番外篇——虚拟继承解决数据冗余和二义性的原理
C++番外篇——虚拟继承解决数据冗余和二义性的原理
32 1
|
10天前
|
安全 编译器 程序员
C++的忠实粉丝-继承的热情(1)
C++的忠实粉丝-继承的热情(1)
11 0
|
17天前
|
编译器 C++
C++入门11——详解C++继承(菱形继承与虚拟继承)-2
C++入门11——详解C++继承(菱形继承与虚拟继承)-2
26 0
|
17天前
|
程序员 C++
C++入门11——详解C++继承(菱形继承与虚拟继承)-1
C++入门11——详解C++继承(菱形继承与虚拟继承)-1
30 0
|
1月前
|
C++
C++(二十)继承
本文介绍了C++中的继承特性,包括公有、保护和私有继承,并解释了虚继承的作用。通过示例展示了派生类如何从基类继承属性和方法,并保持自身的独特性。此外,还详细说明了派生类构造函数的语法格式及构造顺序,提供了具体的代码示例帮助理解。
|
28天前
|
C++
c++继承层次结构实践
这篇文章通过多个示例代码,讲解了C++中继承层次结构的实践应用,包括多态、抽象类引用、基类调用派生类函数,以及基类指针引用派生类对象的情况,并提供了相关的参考链接。