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;
} 


相关文章
|
1天前
|
存储 监控 算法
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
在数字化办公时代,公司监控上网软件成为企业管理网络资源和保障信息安全的关键工具。本文深入剖析C++中的链表数据结构及其在该软件中的应用。链表通过节点存储网络访问记录,具备高效插入、删除操作及节省内存的优势,助力企业实时追踪员工上网行为,提升运营效率并降低安全风险。示例代码展示了如何用C++实现链表记录上网行为,并模拟发送至服务器。链表为公司监控上网软件提供了灵活高效的数据管理方式,但实际开发还需考虑安全性、隐私保护等多方面因素。
11 0
公司监控上网软件架构:基于 C++ 链表算法的数据关联机制探讨
|
1月前
|
C++ 开发者
C++学习之继承
通过继承,C++可以实现代码重用、扩展类的功能并支持多态性。理解继承的类型、重写与重载、多重继承及其相关问题,对于掌握C++面向对象编程至关重要。希望本文能为您的C++学习和开发提供实用的指导。
60 16
|
1月前
|
编译器 数据安全/隐私保护 C++
【C++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】
本实验旨在学习类的继承关系、不同继承方式下的访问控制及利用虚基类解决二义性问题。主要内容包括: 1. **类的继承关系基础概念**:介绍继承的定义及声明派生类的语法。 2. **不同继承方式下对基类成员的访问控制**:详细说明`public`、`private`和`protected`继承方式对基类成员的访问权限影响。 3. **利用虚基类解决二义性问题**:解释多继承中可能出现的二义性及其解决方案——虚基类。 实验任务要求从`people`类派生出`student`、`teacher`、`graduate`和`TA`类,添加特定属性并测试这些类的功能。最终通过创建教师和助教实例,验证代码
57 5
|
3月前
|
编译器 C++ 开发者
【C++】继承
C++中的继承是面向对象编程的核心特性之一,允许派生类继承基类的属性和方法,实现代码复用和类的层次结构。继承有三种类型:公有、私有和受保护继承,每种类型决定了派生类如何访问基类成员。此外,继承还涉及构造函数、析构函数、拷贝构造函数和赋值运算符的调用规则,以及解决多继承带来的二义性和数据冗余问题的虚拟继承。在设计类时,应谨慎选择继承和组合,以降低耦合度并提高代码的可维护性。
44 1
【C++】继承
|
3月前
|
存储 安全 编译器
【c++】深入理解别名机制--引用
本文介绍了C++中的引用概念及其定义、特性、实用性和与指针的区别。引用是C++中的一种别名机制,通过引用可以实现类似于指针的功能,但更安全、简洁。文章详细解释了引用的定义方式、引用传参和返回值的应用场景,以及常引用的使用方法。最后,对比了引用和指针的异同,强调了引用在编程中的重要性和优势。
59 1
|
4月前
|
安全 程序员 编译器
【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则
【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则
115 11
|
4月前
|
C++
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
77 1
|
4月前
|
C++
C++番外篇——虚拟继承解决数据冗余和二义性的原理
C++番外篇——虚拟继承解决数据冗余和二义性的原理
67 1
|
4月前
|
安全 编译器 程序员
C++的忠实粉丝-继承的热情(1)
C++的忠实粉丝-继承的热情(1)
36 0
|
4月前
|
编译器 C++
C++入门11——详解C++继承(菱形继承与虚拟继承)-2
C++入门11——详解C++继承(菱形继承与虚拟继承)-2
62 0