亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++繼承詳細(xì)介紹

 更新時(shí)間:2022年10月18日 14:49:21   作者:是星星鴨  
我們都知道面向?qū)ο笳Z言的三大特點(diǎn)是:**封裝,繼承,多態(tài)。**之前在類和對象部分,我們提到了C++中的封裝,那么今天呢,我們來學(xué)習(xí)一下C++中的繼承

前言

可能會涉及到匯編的知識,不過這沒有關(guān)系,肯定能看懂,看不懂留言,我再做解釋。

使用到的工具是vs2010。

本節(jié)只講繼承的特點(diǎn),公有私有多態(tài)等內(nèi)容暫且不講,以后會細(xì)說。

一、什么是繼承

繼承就是數(shù)據(jù)的復(fù)制

概念模糊、直接上代碼:

#include <stdio.h>
#include <Windows.h>
struct Master            // 父類(基類)
{
	int a;
	int b;
};
struct Slave:Master      // 子類(派生類)
{
	int c;
	int d;
};
int main()
{
	Slave slave;
	slave.a = 1;
	slave.b = 2;
	slave.c = 3;
	slave.d = 4;
	int x = sizeof(slave);
	system("pause");      // 此處下斷點(diǎn)查看x的大?。ㄗ宇惖拇笮。?
	return 0;
}

運(yùn)行,查看x的值:

16,這足以說明slave是拷貝了一份a和b給slave子類的。

查看匯編:

可以看出繼承就是數(shù)據(jù)的復(fù)制

二、派生類和基類的成員重復(fù)問題

1、派生類和基類的成員可以重復(fù)嗎?

2、重復(fù)的話是使用的哪一個類的成員呢?

解答如下:

1、派生類和基類的成員可以重復(fù)嗎?

可以。

證明:

#include <stdio.h>
#include <Windows.h>
struct Master
{
	int a;
	int b;
};
struct Slave:Master
{
	int a;
	int d;
};
int main()
{
	Slave slave;
    printf("%d \n",sizeof(slave));
	system("pause");           
	return 0;
}

運(yùn)行:

不僅可以,而且slave類的大小依舊是16字節(jié);

這說明了子類的a和父類的a是分開的,父類的a依舊被拷貝到了子類,盡管子類已經(jīng)有成員a;

2、重復(fù)的話是使用的哪一個類的成員呢?

這樣就不要使用變量來測試了,因?yàn)樽兞繜o法輸出內(nèi)容,很難分辨出是父類還是子類的,所以我們使用函數(shù)。

如下:

#include <stdio.h>
#include <Windows.h>
struct Master
{
	void test()
	{
		printf("這是父類的測試。\n");
	}
};
struct Slave:Master
{
	void test()
	{
		printf("這是子類的測試。\n");
	}
};
int main()
{
	Slave slave;
	slave.test();
	system("pause");
	return 0;
}

定義一父一子,類中都定義了test函數(shù),那么子類的對象會調(diào)用誰的呢?

運(yùn)行如下:

子類調(diào)用了子類的。

父類的對象會調(diào)用誰的呢?

測試如下:

運(yùn)行:

父類調(diào)用父類。

可以看到,對象的默認(rèn)調(diào)用都是本類自己定義的函數(shù)。

父類調(diào)用子類方法

父類可以調(diào)用子類方法嗎?如何調(diào)用?子類又如何調(diào)用父類呢?

父類可以調(diào)用子類方法,步過需要一些手段;子類可以直接調(diào)用父類

先看一張圖:

從這張圖我們可以得知,子類包含了父類中允許繼承的所有內(nèi)容;但父類不包含任何子類的東西。

所以,子類可以直接調(diào)用父類是應(yīng)該的,如下:

#include <stdio.h>
#include <Windows.h>
struct Master
{
	void test()
	{
		printf("這是父類的測試。\n");
	}
};
struct Slave:Master
{
	void test()
	{
		printf("這是子類的測試。\n");
	}
};
int main()
{
	Slave slave;
	slave.test();
	slave.Master::test();        // 聲明調(diào)用父類的內(nèi)容即可
	system("pause");
	return 0;
}

運(yùn)行如下:

可以看到,子類正常的調(diào)用了父類的方法;

如果父類直接調(diào)用子類的呢?

如下:

直接調(diào)用的話是不被允許的。

不過可以通過其他方法進(jìn)行調(diào)用;

父類調(diào)用子類

我們知道,純虛函數(shù)是必須要子類進(jìn)行實(shí)現(xiàn)的,如果父類定義了純虛函數(shù),子類不進(jìn)行實(shí)現(xiàn),就會報(bào)錯;我們可以通過這一點(diǎn),讓父類定義純虛函數(shù),子類來實(shí)現(xiàn)這個純虛函數(shù);然后父類定義指針(純虛類就是接口類,無法定義對象,可以定義指針)來指向子類,調(diào)用子類的函數(shù)。

如下:

#include <stdio.h>
#include <Windows.h>
struct Master
{
	virtual void test() = 0;		 // 父類定義純虛函數(shù)
};
struct Slave:Master
{
	void test()						 // 子類實(shí)現(xiàn)純虛函數(shù)
	{
		printf("這是子類的測試。\n");
	}
};
int main()
{
	Slave slave;
	slave.test();					 // 子類正常調(diào)用
	// Master master;				 // 不可以定義對象,會出錯。
	Master *master = &slave;		 // 可以定義指針指向子類
	master->test();
	system("pause");
	return 0;
}

運(yùn)行:

成功調(diào)用。

當(dāng)然還有其他方法可以讓父類調(diào)用子類,不過本文章只講繼承,不深入其他內(nèi)容;大家感興趣的話可以自己百度看看。

三、繼承不僅僅局限于父類

怎么理解這個標(biāo)題呢?就是說,不單單是父類可以有派生類,子類也可以有派生類。

如果子類有派生類,那么子類的派生類僅僅有父類的成員,還是既有父類的成員也有父類的父類成員?

觀點(diǎn):子類的派生類,即會擁有父類的公有成員也會擁有父類的父類的公有成員。

文字模糊,看圖:

通過這張圖我們可以知道:Son調(diào)用Slave的函數(shù)或者M(jìn)aster的函數(shù)可以直接調(diào)用;

Son包含Master和Slave所有公有成員、Slave只包含Master的公有成員、Master只包含自己的成員。

論證如下:

直接測試類所占用字節(jié)數(shù)就行了,如下:

#include <stdio.h>
#include <Windows.h>
struct Master
{
	int a;
	int b;
};
struct Slave:Master
{
	int c;
	int d;
};
struct Son:Slave
{
	int e;
	int f;
};
int main()
{
	int MasterSize = sizeof(struct Master);
	int SlaveSize = sizeof(struct Slave);
	int SonSize = sizeof(struct Son);
	printf("Master成員個數(shù):\t%d\nSlave成員個數(shù):\t\t%d\nSon成員個數(shù):\t\t%d\n",MasterSize/4,SlaveSize/4,SonSize/4);
	system("pause");
	return 0;
}

Slave繼承Master,Son繼承Slave

三個類的成員都是int類型,所以通過類的字節(jié)數(shù)/4就可以知道這個類有幾個成員

運(yùn)行如下:

論證成功。

四、多重繼承

就是說子類不單單可以繼承一個父類,可以繼承多個。

如下:

#include <stdio.h>
#include <Windows.h>
struct Master                 // 第一個父類
{
	int a;
	int b;
};
struct Slave                  // 第二個父類
{
	int c;
	int d;
};
struct Son:Slave,Master       // 兩個父類
{
	int e;
	int f;
};
int main()
{
	int MasterSize = sizeof(struct Master);
	int SlaveSize = sizeof(struct Slave);
	int SonSize = sizeof(struct Son);
	printf("Master成員個數(shù):\t%d\nSlave成員個數(shù):\t\t%d\nSon成員個數(shù):\t\t%d\n",MasterSize/4,SlaveSize/4,SonSize/4);
	system("pause");
	return 0;
}

運(yùn)行如下:

所以,如圖:

這就是多重繼承,但是多重繼承增加了程序的復(fù)雜度,不建議使用 。

總結(jié)

1、什么是繼承?

繼承就是數(shù)據(jù)的復(fù)制

2、為什么要繼承?

減少重復(fù)代碼的編寫

3、繼承不僅僅局限于父類

4、多重繼承增加了程序的復(fù)雜度,不建議使用

5、父類基類都是同一個東西,子類派生類都是同一個東西

到此這篇關(guān)于C++繼承詳細(xì)介紹的文章就介紹到這了,更多相關(guān)C++繼承內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言動態(tài)內(nèi)存的分配最全面分析

    C語言動態(tài)內(nèi)存的分配最全面分析

    動態(tài)內(nèi)存是相對靜態(tài)內(nèi)存而言的。所謂動態(tài)和靜態(tài)就是指內(nèi)存的分配方式。動態(tài)內(nèi)存是指在堆上分配的內(nèi)存,而靜態(tài)內(nèi)存是指在棧上分配的內(nèi)存,本文帶你深入探究C語言中動態(tài)內(nèi)存的管理
    2022-08-08
  • C++利用鏈棧實(shí)現(xiàn)表達(dá)式求值

    C++利用鏈棧實(shí)現(xiàn)表達(dá)式求值

    這篇文章主要為大家詳細(xì)介紹了C++利用鏈棧實(shí)現(xiàn)表達(dá)式求值的相關(guān)資料,感興趣的小伙伴們可以參考一下
    2016-05-05
  • C++實(shí)現(xiàn)LeetCode(90.子集合之二)

    C++實(shí)現(xiàn)LeetCode(90.子集合之二)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(90.子集合之二),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++處理輸入字符串并轉(zhuǎn)為數(shù)組的操作

    C++處理輸入字符串并轉(zhuǎn)為數(shù)組的操作

    這篇文章主要介紹了C++處理輸入字符串并轉(zhuǎn)為數(shù)組的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • c++將字符串轉(zhuǎn)數(shù)字的實(shí)例方法

    c++將字符串轉(zhuǎn)數(shù)字的實(shí)例方法

    在本篇文章里小編給大家整理的是關(guān)于c++將字符串轉(zhuǎn)數(shù)字的實(shí)例方法,有需要的朋友們可以參考下。
    2020-02-02
  • C語言使用普通循環(huán)方法和遞歸求斐波那契序列示例代碼

    C語言使用普通循環(huán)方法和遞歸求斐波那契序列示例代碼

    這篇文章主要介紹了C語言使用普通循環(huán)方法和遞歸求斐波那契序列示例代碼,大家參考使用吧
    2013-11-11
  • C++ 系統(tǒng)String類詳解

    C++ 系統(tǒng)String類詳解

    這篇文章主要介紹了C++的系統(tǒng)String類,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11
  • 初學(xué)C++之自定義類型名簡化詳解

    初學(xué)C++之自定義類型名簡化詳解

    下面小編就為就大家?guī)硪黄鯇W(xué)C++之自定義類型名簡化詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • C/C++中獲取數(shù)組長度的方法示例

    C/C++中獲取數(shù)組長度的方法示例

    這篇文章主要介紹了C/C++中獲取數(shù)組長度的方法,很實(shí)用的一種方法,需要的朋友可以參考下
    2014-08-08
  • C語言每日練習(xí)之冒泡排序

    C語言每日練習(xí)之冒泡排序

    這篇文章主要介紹了C語言冒泡排序,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-11-11

最新評論