最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++繼承詳細介紹

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

前言

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

使用到的工具是vs2010。

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

一、什么是繼承

繼承就是數(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");      // 此處下斷點查看x的大?。ㄗ宇惖拇笮。?
	return 0;
}

運行,查看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;
}

運行:

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

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

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

這樣就不要使用變量來測試了,因為變量無法輸出內(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)用誰的呢?

運行如下:

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

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

測試如下:

運行:

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

可以看到,對象的默認調(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;
}

運行如下:

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

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

如下:

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

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

父類調(diào)用子類

我們知道,純虛函數(shù)是必須要子類進行實現(xiàn)的,如果父類定義了純虛函數(shù),子類不進行實現(xiàn),就會報錯;我們可以通過這一點,讓父類定義純虛函數(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()						 // 子類實現(xiàn)純虛函數(shù)
	{
		printf("這是子類的測試。\n");
	}
};
int main()
{
	Slave slave;
	slave.test();					 // 子類正常調(diào)用
	// Master master;				 // 不可以定義對象,會出錯。
	Master *master = &slave;		 // 可以定義指針指向子類
	master->test();
	system("pause");
	return 0;
}

運行:

成功調(diào)用。

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

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

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

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

觀點:子類的派生類,即會擁有父類的公有成員也會擁有父類的父類的公有成員。

文字模糊,看圖:

通過這張圖我們可以知道:Son調(diào)用Slave的函數(shù)或者Master的函數(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就可以知道這個類有幾個成員

運行如下:

論證成功。

四、多重繼承

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

如下:

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

運行如下:

所以,如圖:

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

總結(jié)

1、什么是繼承?

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

2、為什么要繼承?

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

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

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

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

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

相關(guān)文章

  • C語言+EasyX實現(xiàn)數(shù)字雨效果

    C語言+EasyX實現(xiàn)數(shù)字雨效果

    這篇文章主要為大家詳細介紹了C語言+EasyX實現(xiàn)數(shù)字雨效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • C++編程使用findfirst和findnext查找及遍歷文件實現(xiàn)示例

    C++編程使用findfirst和findnext查找及遍歷文件實現(xiàn)示例

    這篇文章主要為大家介紹了C++編程如何使用findfirst和findnext查找及遍歷文件實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • 使用C++模擬實現(xiàn)2024春晚劉謙魔術(shù)

    使用C++模擬實現(xiàn)2024春晚劉謙魔術(shù)

    劉謙在2024年春晚上的撕牌魔術(shù)的數(shù)學(xué)原理非常簡單,所以這篇文章主要為大家詳細介紹了如何使用C++模擬實現(xiàn)這一魔術(shù)效果,感興趣的可以了解下
    2024-02-02
  • C++直接cout指針名的含義?

    C++直接cout指針名的含義?

    今天小編就為大家分享一篇關(guān)于C++直接cout指針名的含義?,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-04-04
  • C++面試題之進制轉(zhuǎn)換的實例

    C++面試題之進制轉(zhuǎn)換的實例

    這篇文章主要介紹了C++面試題之進制轉(zhuǎn)換的實例的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這樣的知識,需要的朋友可以參考下
    2017-10-10
  • C語言實現(xiàn)成績統(tǒng)計示例

    C語言實現(xiàn)成績統(tǒng)計示例

    這篇文章主要介紹了C語言實現(xiàn)成績統(tǒng)計示例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C++拷貝構(gòu)造函數(shù)中的陷阱

    C++拷貝構(gòu)造函數(shù)中的陷阱

    這篇文章主要介紹了C++拷貝構(gòu)造函數(shù)中的陷阱,拷貝構(gòu)造函數(shù)大家都比較熟悉,通俗講就是傳入一個對象,拷貝一份副本。不過看似簡單的東西,實際不注意的話就會產(chǎn)生問題,下面我們就來看看C++拷貝構(gòu)造函數(shù)中都有哪些陷阱吧
    2022-01-01
  • C語言 從根本上理解數(shù)組

    C語言 從根本上理解數(shù)組

    數(shù)組是一組有序的數(shù)據(jù)的集合,數(shù)組中元素類型相同,由數(shù)組名和下標(biāo)唯一地確定,數(shù)組中數(shù)據(jù)不僅數(shù)據(jù)類型相同,而且在計算機內(nèi)存里連續(xù)存放,地址編號最低的存儲單元存放數(shù)組的起始元素,地址編號最高的存儲單元存放數(shù)組的最后一個元素
    2022-04-04
  • C語言超詳細講解函數(shù)指針的運用

    C語言超詳細講解函數(shù)指針的運用

    函數(shù)指針是一個指針變量,它可以存儲函數(shù)的地址,然后使用函數(shù)指針,下面這篇文章主要給大家介紹了關(guān)于C語言進階教程之函數(shù)指針的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • C++ 使用模板實現(xiàn)一個List的實例

    C++ 使用模板實現(xiàn)一個List的實例

    這篇文章主要介紹了 C++ 使用模板實現(xiàn)一個List的實例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05

最新評論

寿光市| 阿城市| 建平县| 镇原县| 白河县| 河东区| 青川县| 芒康县| 库尔勒市| 明星| 张家口市| 通渭县| 靖宇县| 资源县| 巴中市| 曲沃县| 宣威市| 迭部县| 文成县| 册亨县| 家居| 龙江县| 民乐县| 洪泽县| 镇雄县| 阿拉善盟| 汉源县| 大足县| 时尚| 宜章县| 太仓市| 阳原县| 武邑县| 隆子县| 颍上县| 葫芦岛市| 英山县| 神池县| 武宣县| 油尖旺区| 娱乐|