C++三大特性之一:继承

这篇具有很好参考价值的文章主要介绍了C++三大特性之一:继承。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

C++三大特性:继承、多态和封装。继承是面向对象编程的一个核心概念,它允许我们根据一个已存在的类(基类或者叫父类),创建一个新的类(派生类或者叫子类),这个新的类继承了类的属性和行为。

一、继承方式

1.继承格式。class 子类名 :继承属性(public\protected\private)父类名{ ...}
2.注意父类名后面没有()
3.继承的子类调用继承过来的成员时候,直接写的是子类的名字调用

class www {
public:
	void head() {
		cout << "头" << endl;
	}
	void wei() {
		cout << "尾" << endl;
	}
	void ce() {
		cout << "侧" << endl;
	}
};

class c :public www {
public:
	void cqq() {
		cout << "c++" << endl;
	}
};

二、继承类型

1.c++有三种继承类型:公有继承(public)、保护继承(protected)和私有继承(private)。
2.简记:私有继承子类是不能继承的,公有和保护继承要看优先级
C++三大特性之一:继承,C++学习,c++,开发语言

继承中构造和析构的顺序

1.构造顺序:首先是父类的构造、然后是子类的构造。
2.析构顺序:首先是子类的析构。然后是父类的析构。

#include<iostream>
using namespace std;

class dad {
public:
	dad() {
		cout << "dad的构造函数已调用:  " << endl;
	}
	~dad() {
		cout << "dad的析构函数已调用" << endl;
	}
};

class son :public dad {
public:
	son() {
		cout << "son的构造函数已调用: " << endl;
	}
	~son() {
		cout << "son的析构函数已调用" << endl;
	}
};


void test() {
	son s1;
}

int main() {

	test();
	
	system("pause");
	return 0;

}

输出:
C++三大特性之一:继承,C++学习,c++,开发语言

继承中的内存分配

1.父类的非静态成员都会被继承(也就是除了static的)
2.私有属性也会被继承,只是被隐藏 了
3.3.应用菜单:开发人员命令提示工具查看对象 Developer Command Prompt for VS 2017

  • cd 具体路径下 进入文件中
  • dir查看文件
  • cl /d1 reportSingleClassLayoutson xxxx.cpp就出来了。记忆:报告单个类布局类名 文件名
#include<iostream>
using namespace std;
#include<string>

class dad {
public:
	int a;
private:
	int b;
protected:
	int c;
};

class son :public dad {
public:
	int d;
};

void test() {
	son s1;
	cout << "son的长度为:  " << sizeof(s1) << endl;
}

int main() {
	test();

	system("pause");
	return 0;

}

输出
C++三大特性之一:继承,C++学习,c++,开发语言

多继承语法(非重点)

1.公式:class 子类:public 父类1,public 父类2{...}

2.如果继承的两个父类都有同名成员,调用的时候一定要加作用域

3.实际开发不要用那么多多继承,可能存在两个人写两个父类,成员名相同

继承中同名静态成员的处理

1.静态成员变量是类级别的,而不是对象级别的。在子类和父类中,如果有同名的静态成员变量,它们被视为两个独立的变量。

继承一般在哪里用到

1.在游戏开发中,继承经常用于创建角色、物品、敌人等游戏对象的层次结构。例如,一个 Enemy 类可能继承自一个更通用的 GameObject 类,而不同类型的敌人(如 BossEnemy 或 MinionEnemy)则可以进一步继承自 Enemy 类。

进阶:菱形继承和虚拟继承

1.菱形继承指的是,父类A有两个子类B1和B2,但是C使用多继承了B1和B2。当C调用A的成员函数时,有两条路径达到A那里。会造成混乱
2.解决菱形继承的方法就是虚拟继承,B1和B2在继承A时候使用虚拟继承。`class 子类名:virtual public 父类{};
3.

class Animal
{
public:
	int m_Age;
};

//继承前加virtual关键字后,变为虚继承
//此时公共的父类Animal称为虚基类
class Sheep : virtual public Animal {};
class Tuo   : virtual public Animal {};
class SheepTuo : public Sheep, public Tuo {};

void test01()
{
	SheepTuo st;
	st.Sheep::m_Age = 100;
	st.Tuo::m_Age = 200;

	cout << "st.Sheep::m_Age = " << st.Sheep::m_Age << endl;
	cout << "st.Tuo::m_Age = " <<  st.Tuo::m_Age << endl;
	cout << "st.m_Age = " << st.m_Age << endl;

}
int main() {

	test01();
	
	system("pause");
	
	return 0;

}

4.虚拟继承可能会引入一些额外的开销,因为它需要维护一个指向共享基类的指针或偏移量,以确保正确地访问基类成员。因此,在设计类结构时应该仔细考虑是否真正需要虚拟继承。

总结

主要理解继承的方式,继承的类型有三种,私有属性无论哪种继承都不可以调用的,但是内存是占用的。继承是把非静态成员都继承了,同名静态成员的调用需要指明作用域。使用虚拟继承可以解决菱形继承的问题,但是会导致内存开销变大。文章来源地址https://www.toymoban.com/news/detail-857262.html

到了这里,关于C++三大特性之一:继承的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++三大特性—继承“复杂的菱形继承及菱形虚拟继承”

    C++的一个大坑:菱形继承 希望这篇文章能让你理解什么是菱形继承,以及菱形继承的注意事项 单继承:一个子类只有一个直接父类时称这个继承关系为单继承 多继承:一个子类有两个或以上直接父类时称这个继承关系为多继承  java语言不支持多继承,只支持单继承。 菱形

    2024年02月03日
    浏览(46)
  • 【C++】三大特性 --- 继承的详细讲解

    目录 1.继承的概念及定义 1.1 继承的概念 1.2 继承定义 1.2.1定义格式 1.2.2继承关系和访问限定符 1.2.3继承基类成员访问方式的变化 2.基类和派生类对象赋值转换 3.继承中的作用域 4.派生类的默认成员函数 5.继承与友元 6.继承与静态成员 7.复杂的菱形继承及菱形虚拟继承 8.继承的

    2024年02月05日
    浏览(47)
  • 面向对象的三大特性之继承(C++)

    概念   继承机制是面向对象编编程使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称为派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。继承是类设计层次的复用。 定

    2024年02月06日
    浏览(51)
  • C++核心编程—类和对象,类的三大特性——封装、继承、多态

    纵有疾风起,人生不言弃。本文篇幅较长,如有错误请不吝赐教,感谢支持。 ①什么是对象? 生活中有各种各样的 事物 ,如人、动物、植物等在C++中将这些称为对象。 对象多种多样, 各种对象的属性也不相同 。 例如狗的品种,毛色,年龄等 各个对象都有自己的行为 ,例

    2024年02月07日
    浏览(64)
  • 面向对象三大特性之一——継承(上篇)

    目录 前文 一.什么是継承? 1.1 継承的定义 1.2 継承的格式 1.2.1 継承的使用格式 1.2.2 継承关系和访问限定符 二,基类和派生类对象复制转换 三,継承中的作用域 四,派生类/子类中的默认成员函数 六,継承与友元  六,継承与静态成员 总结 本篇文章主要是详解面向对象三大

    2024年02月03日
    浏览(42)
  • 学习基于 JavaScript 语言 的计算机界三大神书”之一 ——SICP

    《计算机程序的构造和解释》( S tructure and I nterpretation of C omputer P rograms,简记为 SICP )是MIT的基础课教材,出版后引起计算机教育界的广泛关注,对推动全世界大学计算机科学技术教育的发展和成熟产生了很大影响。这本书的第1版于1984年出版,第2版于1996年出版,至今已被

    2024年03月13日
    浏览(82)
  • 【JAVASE】面向对象程序三大特性之一( 封装)

    ✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉n 🍎个人主页:再无B~U~G-CSDN博客 目标: 1.包的使用 2.static的使用 3. 代码块概念以及分类 面向对象程序三大特性:封装、继承、多态 。而类和对象阶段,主要研究的就是封装特性。何为

    2024年04月17日
    浏览(50)
  • java三大特性之【继承】

    概念 继承就是将多个类的共性抽取出来,提出继承的概念。就是在进行共性抽取,实现代码复用。 提高代码的复用性,方便进行子类,子功能的扩展,将所有共性的内容放在父类(基类),子类只需要关注子类独有的属性和功能 父类和子类成员关系 父类和子类不存在同名的

    2024年02月08日
    浏览(35)
  • Java三大特性:封装、继承、多态

    高内聚,低耦合 高内聚:类内部操作自己完成,不允许外部干涉。 低耦合:仅暴露少量的方法给外部使用。 封装(数据的隐藏) 通常应禁止直接访问一个对象中数据的实际表达,而应该通过操作接口来访问,这称为信息的隐藏。 封装的特点 1.提高程序的安全性,保护数据

    2024年03月21日
    浏览(47)
  • 【JAVASE】带你了解面向对象三大特性之一(多态)

    ✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:再无B~U~G-CSDN博客 多态的概念:通俗来说,就是多种形态, 具体点就是去完成某个行为,当不同的对象去完成时会产生出不同 的状 态。 总的来说:同一件事情,发生在不同对象

    2024年04月14日
    浏览(73)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包