<c++> 类的继承 | 基类与派生类 | 构造函数与析构函数

这篇具有很好参考价值的文章主要介绍了<c++> 类的继承 | 基类与派生类 | 构造函数与析构函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

<c++> 类的继承 | 基类与派生类 | 构造函数与析构函数

  • 🚀 个人简介:CSDN「博客新星」TOP 10 , C/C++ 领域新星创作者
  • 💟 作    者:锡兰_CC ❣️
  • 📝 专    栏:从零开始的 c++ 之旅
  • 🌈 若有帮助,还请关注➕点赞➕收藏,不行的话我再努努力💪💪💪

前言

c++面向对象三大特性:封装,继承,多态。通过本文我们将了解什么是类的继承以及继承的使用。
Q:什么是继承?
A: 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。子类的对象拥有其父类全部属性与服务,称作子类对父类的继承。例如,轮船、客轮;人、大人。一个类可以是多个父类的子类,它从多个父类中继承了属性与服务,这称为多继承。例如,客轮与轮船和客运工具。

一、类的继承

在学习继承之前,我们先来了解一下基类和派生类。

1、基类与派生类

我们先来看下面这串代码:

#include<iostream>
using namespace std;

class Student {
	public:
		int age;
		char *name;
		Student() {
			age = 18;
			name = "Ceylan";
		}
};

class Undergraduate:public Student {
	public:
		int grate;
		Undergraduate():Student() {
			grate = 1;
		}
};

int main() {
	Undergraduate s;
	cout << s.age << endl;
	return 0;
}

在这个例子中,学生类Student就可以作为一个基类,研究生类Undergraduate就是一个派生类。
main函数中,我们首先用构造函数进行初始化,研究生类Undergraduate通过公共方法继承了Student类,也就是继承 了Student类的成员属性和方法,就可以输出Student的成员变量age的值。

2、什么是派生类

Q:什么是派生类?
A: 派生类就是继承了一个或者多个类的子类。

3、派生类如何定义

Q:派生类如何定义?
A: 参考上文代码,程序中先定义基类Student,再定义派生类Student继承基类Student。需要注意,在c++中,继承可以是多继承,也就是说派生类可以同时继承多个类,语法如下所示:

	class Derived:public Base1,public Base2 {
		//...
	}  

4、派生类的特点

  • 派生类拥有基类的所有数据成员和成员函数(不包括构造函数和析构函数)
  • 派生类可以拥有基类没有的数据成员和成员函数
  • 派生类对象可以通过基类的公有函数访问基类的私有成员
  • 派生类可以看成是一种特殊的基类,也就是说可以把派生对象当成基类对象使用。

二、派生类的访问权限与作用

在类名冒号之后, 跟着的关键字不同,派生类的访问权限会有不同。根据关键字,可以分为三种情况,公有派生、保护派生、私有派生。

1、公有派生

	class 类名∶public 基类	
	{
  	  // …
	};

公有派生使用public关键字来继承,公有派生的所有基类成员在派生类中保持原有的访问级别。

#include<iostream>
using namespace std;

class A  
{
	public:
    	void setx(int n) {
 	       x = n;
  	    }
 	    void showx () {
 	       cout << x << endl;
	    }
	public:
		int x;
} ;
class B: private A {
	public:
		void setxy(int n, int m) {
			setx(n);
			y = m;
		}
		void showxy() {
			cout << x << " " << y << endl;
		}
	public:
		int y;
};

int main() {
	B s;
	s.setxy(10,20);
	s.showxy();
}

<c++> 类的继承 | 基类与派生类 | 构造函数与析构函数

2、保护派生

	class 类名∶protected 基类	
	{
  	  // …
	};

保护派生使用protected关键字来继承,保护派生中public成员protected成员、protected成员不变、private 成员不变。

3、私有派生

	class 类名∶private 基类	
	{
  	  // …
	};

私有派生使用private 关键字来继承,私有派生中所有基类成员在派生类中都变为private成员。

三、派生类的构造函数与析构函数

派生类构造函数和析构函数的执行顺序

派生类继承基类后,当创建派生类对象时,也会调用基类的构造函数。那么,是先进行基类的构造和析构还是先进行派生类的构造和析构呢?我们来看看下面的代码案例:

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

int main() {
	Son s;
	return 0;
} 

执行效果:
<c++> 类的继承 | 基类与派生类 | 构造函数与析构函数

通常情况下,当创建派生类对象时, 首先执行基类的构造函数, 随后再执行派生类的构造函数。当结束派生类对象时, 则先执行派生类的析构函数, 随后再执行基类的析构函数。

四、多继承

Q:什么是多继承?
A:多继承是指从多个直接基类中产生派生类的能力,多继承的派生类继承了所有基类的成员。
多继承可能会引发基类中有同名成员的出现,使用时需要加上作用域进行区分,详细代码如下:

#include<iostream>
using namespace std;

class A1 {
	public:
		A1() {
			a = 100;
		}
	public:
		int a;
}; 

class A2 {
	public:
		A2() {
			a = 200;
		}
	public:
		int a;
};

class A3 : public A1,public A2 {
	public:
		A3() {
			a = 300;
		}
	public:
		int a;
};

int main() {
	A3 s;
	cout << s.A1::a << endl;
	cout << s.A2::a << endl;
	cout << s.A3::a << endl;
	return 0;
}

<c++> 类的继承 | 基类与派生类 | 构造函数与析构函数

其他:

更多专栏订阅:文章来源地址https://www.toymoban.com/news/detail-419385.html

  • 👍 【开卷数据结构】
  • 💛 【备战蓝桥,冲击省一】
  • 💕   从零开始的 c++ 之旅
  • 💖 【OpenCV • c++】计算机视觉

到了这里,关于<c++> 类的继承 | 基类与派生类 | 构造函数与析构函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • C++ | 继承(基类,父类,超类),(派生类,子类)

    文章参考:https://blog.csdn.net/war1111886/article/details/8609957 一 .继承中的访问权限关系 1.基类,父类,超类是指被继承的类,派生类,子类是指继承于基类的类.  2.在C++中使用: 冒号表示继承,如class A : public B;表示派生类A从基类B继承而来 3.派生类包含基类的所有

    2024年02月15日
    浏览(29)
  • 【C++入门到精通】C++入门 —— 继承(基类、派生类和多态性)

    前面我们讲了C语言的基础知识,也了解了一些数据结构,并且讲了有关C++的命名空间的一些知识点以及关于C++的缺省参数、函数重载,引用 和 内联函数也认识了什么是类和对象以及怎么去new一个 ‘对象’ ,也了解了C++中的模版,以及学习了几个STL的结构也相信大家都掌握

    2024年02月11日
    浏览(33)
  • 头歌Educoder实验:C++ 面向对象 - 类的继承与派生

    第1关:公有继承 —— 学生信息类 任务描述 本关任务:采用公有继承设计学生信息类。 相关知识 继承 继承是使代码可以复用的重要手段,也是面向对象程序设计的核心思想之一。简单的说,继承是指一个对象直接使用另一对象的属性和方法。 C++ 中的继承关系就好比现实生

    2024年02月04日
    浏览(106)
  • [C++]构造与毁灭:深入探讨C++中四种构造函数与析构函数

     个人主页:北·海  🎐CSDN新晋作者  🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:C/C++ 🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗 目录 构造函数有什么作用? 构造函数有什么特点 构造函数的种类 一.默认构造函数 1.什么是

    2024年02月09日
    浏览(30)
  • 【零基础学习C++】构造函数与析构函数

    个人主页:【😊个人主页】 系列专栏:【❤️系列专栏】 期末复习笔记,感兴趣的可以收藏 C++用以初始化对象的数据成员的函数 构造函数要注意的知识点: 构造函数是没有返回值类型的。 构造函数的函数名必须 与类名一致。 构造函数并不是由我们手动调用的, 构造函数

    2024年02月11日
    浏览(32)
  • 【C++】类和对象(中)之构造函数与析构函数

    👀 樊梓慕: 个人主页  🎥 个人专栏: 《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C++》 🌝 每一个不曾起舞的日子,都是对生命的辜负 目录 前言 1.构造函数 1.1概念 1.2特性 2.析构函数 2.1概念 2.2特性 我们继续学习类和对象,今天主要讲解构造

    2024年02月07日
    浏览(36)
  • 基于C/C++将派生类赋值给基类的详细讲解

    目录 将派生类对象赋值给基类对象 将派生类指针赋值给基类指针

    2024年02月08日
    浏览(47)
  • C++中基类和派生类的析构函数

    和构造函数类似,析构函数也不能被继承。与构造函数不同的是,在派生类的析构函数中不用显式地调用基类的析构函数,因为每个类只有一个析构函数,编译器知道如何选择,无需程序员干涉。 另外析构函数的执行顺序和构造函数的执行顺序也刚好相反: 创建派生类对象

    2024年02月10日
    浏览(23)
  • C++继承体系中,基类析构函数请加上virtual,设置为虚函数

    为什么建议在存在继承体系时刻我们的类的析构函数加上virtual呢? 大家看段代码。  咋一看,没什么毛病这段代码,让我们画图理解下。 紫框中的前4个字节指向new开辟的空间。 我们知道,当基类A指针指向基类B时候会发生切片    当我们delete pa时候,编译器不会调用B类的

    2024年02月16日
    浏览(28)
  • 【C++】类与对象(构造函数、析构函数、拷贝构造函数、常引用)

       🌈个人主页: 秦jh__https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343 🔥 系列专栏:   目录 类的6个默认成员函数 构造函数 特性  析构函数 特性  析构的顺序 拷贝构造函数 特性 常引用      💬 hello! 各位铁子们大家好哇。              今日更新了类与对象的构造函数、

    2024年02月21日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包