栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

类和对象---继承

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

类和对象---继承

继承,是面向对象三大特性之一

继承的基本语法
#include
#include
using namespace std;
class BasePage
{
public:
    void header()
    {
        cout << "首页,公开课,登录,注册..." << endl;
    }
    void footer()
    {
        cout << "帮助中心,交流合作,站内地图..." << endl;
    }
    void left()
    {
        cout << "Java,python,c++..." << endl;
    }
    void content()
    {
        cout << "Java学科视频" << endl;
    }
};
//Java页面
class Java :public BasePage  //核心语句
{
public:
    void content()
    {
        cout << "Java学科视频" << endl;
    }
};
//C++页面
class CPP :public BasePage    //核心语句
{
public:
    void content()
    {
        cout << "CPP学科视频" << endl;
    }
};
void test01()
{
    Java ja;
    ja.header();
    ja.footer();
    ja.left();
    ja.content();

    CPP cpp;
    cpp.header();
    cpp.footer();
    cpp.left();
    cpp.content();
}
int main()
{
    test01();
	return 0;
}

继承的好处:减少重复代码
语法: class 子类: 继承方式 父类
子类 也称为 派生类
父类 也称为 基类
派生类的成员,包含两大部分:一类是从基类继承过来的,一类是自己增加的成员.

继承方式

相同点:三种继承访问均不可以访问父类中的私有成员

  1. 公共继承
    父类中的公共成员继承为自身公共成员,父类中的保护成员继承为自身保护成员
  2. 保护继承
    父类中的公共成员和保护成员继承为自身保护成员
  3. 私有继承
    父类中的公共成员和保护成员继承为自身私有成员
继承中的对象模型

父类中所有非静态成员属性都会被子类继承下去
父类中私有成员属性是被编译器给隐藏了,因此是访问不到,但确实被继承了

继承中的构造和析构顺序

子类继承父类后,当创建子类对象,也会调用父类的构造函数和析构函数
顺序是 父类构造—子类构造—子类析构—父类析构

继承同名成员处理方式

问题:当子类与父类出现同名的成员,如何通过子类对象,访问到子类或者父类中同名的数据

  • 访问子类同名成员 直接访问即可
  • 访问父类同名成员 需要加作用域(.Base:
    如何调用父类中同名成员函数
    如果子类中出现和父类同名的成员函数,子类的同名成员会隐藏掉父类中所有同名成员函数
    如果想访问父类中被隐藏的同名成员函数,需要加作用域
多继承语法(不建议实际开发使用)

C++允许一个类继承多个类
语法:class :子类 继承方式,子类 继承方式
当父类中出现同名成员,需要加作用域区分(.Basex:

菱形继承(钻石继承)

概念:两个派生类继承同一个基类,又有某个类同时继承两个派生类

#include
#include
using namespace std;
//利用虚继承可以解决菱形继承的问题
//继承前加上关键字virtual变为虚继承
//Animal类称为 虚基类
class Animal
{
public:
	int m_age;
};
class Sheep :virtual public Animal 
{

};
class Tuo :virtual public Animal
{

};
class SheepTuo :public Sheep, public Tuo
{

};
void test01()
{
	SheepTuo st;
	//当菱形继承,;两个父类拥有相同的数据,需要加以作用域区分
	st.Tuo::m_age = 28;
	st.Sheep::m_age = 18;
	cout << st.Tuo::m_age << st.Sheep::m_age << endl;
}
int main()
{
	test01();
	return 0;
	
}

总结:菱形继承会造成子类继承两份相同数据,造成资源浪费,须使用虚继承解决

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/923767.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号