国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C++】繼承基礎知識及簡單應用,使用reportSingleClassLayout(在Visual Studio開發(fā)人員命令提示窗口)查看派生類詳細信息

這篇具有很好參考價值的文章主要介紹了【C++】繼承基礎知識及簡單應用,使用reportSingleClassLayout(在Visual Studio開發(fā)人員命令提示窗口)查看派生類詳細信息。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

author:&Carlton

tag:C++

topic:【C++】繼承基礎知識及簡單應用,使用reportSingleClassLayout(在Visual Studio開發(fā)人員命令提示窗口)查看派生類詳細信息

website:黑馬程序員C++

date:2023年7月22日


目錄

概要

繼承規(guī)則

對象模型

構造析構順序

同名與靜態(tài)同名成員

多繼承

菱形繼承

VS開發(fā)人員命令操作提示窗口


概要

?

? ? ? ? 繼承是C++面向對象程序設計的三大特性之一(封裝,繼承,多態(tài)),既能有效利用已定義好的類,又允許添加之前定義的類中沒有的代碼,有效縮減代碼量,使得程序更加簡潔。

繼承規(guī)則

? ? ? ? class 子類名 : 繼承方式 父類名 { };

? ? ? ? 繼承方式有public,protected,private

對象模型

? ? ? ? 父類所有成員都繼承,只是根據(jù)繼承方式不同繼承得到的成員訪問權限也相應改變:

? ? ? ?(父類的私有成員子類繼承,但均無法訪問,需要聲明友元,以下說明不包括父類私有成員

????????①公開繼承public: 訪問權限相應繼承

? ? ? ? ②保護繼承protected: 全定為protected

? ? ? ? ③私有繼承private: 全部變?yōu)閜rivate

? ? ? ? 注:成員包括屬性和函數(shù)

? ? ? ? 子類對象模型結構(具體操作步驟在本文最后一小節(jié)說明):

【C++】繼承基礎知識及簡單應用,使用reportSingleClassLayout(在Visual Studio開發(fā)人員命令提示窗口)查看派生類詳細信息,C++,暑期實踐,c++,命令模式

? ? ? ? 說明子類繼承父類所有成員的例子:

#include <iostream>
using namespace std;

class Base
{
public:
	int m_a;
protected:
	int m_b;
private:
	int m_c;
};

class Son:public Base
{
public:
	int m_d;
};

void test01()
{
	Son s1;
	cout << sizeof(s1) << endl;
}

int main()
{
	test01();
	return 0;
}

構造析構順序

? ? ? ? 先構造父類,然后構造子類,析構順序與構造順序相反。

????????

源代碼:

#include <iostream>
using namespace std;

class Base
{
public:
	Base()
	{
		cout << "Base的構造函數(shù)" << endl;
	}
	~Base()
	{
		cout << "Base的析構函數(shù)" << endl;
	}
};

class Son :public Base
{
public:
	Son()
	{
		cout << "Son的構造函數(shù)" << endl;
	}
	~Son()
	{
		cout << "Son的析構函數(shù)" << endl;
	}
};

void test01()
{
	Son s1;
}

int main()
{
	test01();
	return 0;
}

程序運行結果:

【C++】繼承基礎知識及簡單應用,使用reportSingleClassLayout(在Visual Studio開發(fā)人員命令提示窗口)查看派生類詳細信息,C++,暑期實踐,c++,命令模式

同名與靜態(tài)同名成員

? ? ? ? 需要添加作用域,對于靜態(tài)成員還能通過類訪問。

?????????Son::Base::m_b << endl;?? ?

????????與Base::m_b含義不同,這里是在子類Son中訪問父類Base作用域下的m_b靜態(tài)成員變量

#include <iostream>
using namespace std;

class Base 
{
public:
	Base():m_a(100)//父類的初始化為100
	{

	}
	int m_a;
	void func()
	{
		cout << "Base-func()" << endl;
	}
	void func(int a)
	{
		cout << "Base-func(a)" << endl;
	}
	//子類有同名的成員函數(shù)時父類的成員函數(shù)被隱藏,無法直接使用占位參數(shù)區(qū)分,還是需要添加作用域區(qū)分
	static int m_b;
};

//靜態(tài)成員變量類內聲明,類外定義初始化
int Base::m_b = 100;

class Son:public Base
{
public:
	Son():m_a(200)//子類的初始化為200
	{

	}
	void func()
	{
		cout << "Son-func()" << endl;
	}
	int m_a;//有同名成員
	static int m_b;		//有靜態(tài)同名成員
};
int Son::m_b = 200;


void test01()
{
	Son s1;
	cout << "子類m_a:" << s1.m_a << endl;
	cout << "父類m_a:" << s1.Base::m_a << endl;		//添加作用域
	s1.func();
	s1.Base::func();		//添加作用域
	s1.Base::func(10);
	//通過對象訪問靜態(tài)成員
	cout << "子類m_b:" << s1.m_b << endl;
	cout << "父類m_b:" << s1.Base::m_b << endl;
	//通過類訪問靜態(tài)成員
	cout << "子類m_b:" << Son::m_b << endl;
	cout << "父類m_b:" << Son::Base::m_b << endl;	//與Base::m_b含義不同,這里是在子類Son中訪問父類Base作用域下的m_b靜態(tài)成員變量
}

int main()
{
	test01();
	return 0;
}

多繼承

class 子類名 : 繼承方式 父類名1,繼承方式 父類名2,……{ } ;

? ? ? ? 多繼承可能會帶來同名成員的問題,但在實際開發(fā)過程中這塊代碼可能由幾個人一起做,如果大量使用多繼承則出現(xiàn)同名成員問題時尋找作用域會很麻煩。

源代碼

#include <iostream>
using namespace std;

class Base1
{
public:
	int m_a;
};

class Base2
{
public:
	int m_b;
};

class Son :public Base1, public Base2		//繼承Base1和Base2
{
	int m_c;
	int m_d;
};

void test01()
{
	cout << "sizeof(Son):" << sizeof(Son) << endl;
}

int main()
{
	test01();
	return 0;
}

多繼承對象模型結構(具體操作步驟見本文最后一節(jié)):

【C++】繼承基礎知識及簡單應用,使用reportSingleClassLayout(在Visual Studio開發(fā)人員命令提示窗口)查看派生類詳細信息,C++,暑期實踐,c++,命令模式

菱形繼承

? ? ? ? 菱形繼承:A被B、C繼承,D繼承B、C


????????解決菱形繼承的兩個問題:①二義性矛盾 ②資源浪費
????????①二義性矛盾:“孫子不知道從父1那訪問爺爺?shù)臇|西還是從父2那里訪問”
????????②資源浪費:無論從父1還是從父2,得到的東西是一樣的,不需要得到兩次

? ? ? ? 解決方法:

? ? ? ? ①添加作用域

? ? ? ? ②使用關鍵字virtual虛繼承

源代碼:

#include <iostream>
#include <string>
using namespace std;

/*
* 解決菱形繼承的兩個問題:①二義性矛盾 ②資源浪費
* ①二義性矛盾:“孫子不知道從父1那訪問爺爺?shù)臇|西還是從父2那里訪問”
* ②無論從父1還是從父2,得到的東西是一樣的,不需要得到兩次
*/

class School
{
public:
	School():m_slogan("厚德載物,格物致知")
	{
		
	}
	string m_slogan;
};

class Teacher1 :virtual public School {};		//加關鍵字virtual,虛繼承

class Teacher2 :virtual public School {};

class Student :public Teacher1, public Teacher2 {};

void test01()
{
	Student s1;
	//cout << s1.m_slogan << endl;	//有二義性錯誤,m_slogan是Teacher1的還是Teacher2的
	cout << s1.Teacher1::m_slogan << endl;		//通過作用域解決第一個問題:二義性錯誤
	cout << s1.Teacher2::m_slogan << endl;
	cout << s1.m_slogan << endl;	//使用virtual虛繼承可以不加作用域,都通過虛擬指針指向基類School的m_slogan,是同一個成員變量
}

int main()
{
	test01();
	return 0;
}

對象模型結構(具體操作步驟見本文最后一節(jié)):

使用虛繼承前:

【C++】繼承基礎知識及簡單應用,使用reportSingleClassLayout(在Visual Studio開發(fā)人員命令提示窗口)查看派生類詳細信息,C++,暑期實踐,c++,命令模式

?

使用虛繼承后:

【C++】繼承基礎知識及簡單應用,使用reportSingleClassLayout(在Visual Studio開發(fā)人員命令提示窗口)查看派生類詳細信息,C++,暑期實踐,c++,命令模式

vbtable:虛基類表

vb:virtual base?虛基類

ptr:pointer 指針

數(shù)字代表位移量

VS開發(fā)人員命令操作提示窗口

系統(tǒng)菜單里找到:

【C++】繼承基礎知識及簡單應用,使用reportSingleClassLayout(在Visual Studio開發(fā)人員命令提示窗口)查看派生類詳細信息,C++,暑期實踐,c++,命令模式

跳轉盤符:

【C++】繼承基礎知識及簡單應用,使用reportSingleClassLayout(在Visual Studio開發(fā)人員命令提示窗口)查看派生類詳細信息,C++,暑期實踐,c++,命令模式

?

鎖定文件路徑(包含源文件的上一級目錄):

【C++】繼承基礎知識及簡單應用,使用reportSingleClassLayout(在Visual Studio開發(fā)人員命令提示窗口)查看派生類詳細信息,C++,暑期實踐,c++,命令模式

?

應用:

? ? ? ? ①查看該文件路徑下文件情況

? ?【C++】繼承基礎知識及簡單應用,使用reportSingleClassLayout(在Visual Studio開發(fā)人員命令提示窗口)查看派生類詳細信息,C++,暑期實踐,c++,命令模式

?

? ? ? ? ②查看類對象模型結構

【C++】繼承基礎知識及簡單應用,使用reportSingleClassLayout(在Visual Studio開發(fā)人員命令提示窗口)查看派生類詳細信息,C++,暑期實踐,c++,命令模式

歡迎指正與分享,謝謝!文章來源地址http://www.zghlxwxcb.cn/news/detail-602893.html

到了這里,關于【C++】繼承基礎知識及簡單應用,使用reportSingleClassLayout(在Visual Studio開發(fā)人員命令提示窗口)查看派生類詳細信息的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Unity 游戲開發(fā)、02 基礎篇 | 知識補充、簡單使用動畫、動畫狀態(tài)機

    Unity 游戲開發(fā)、01 基礎篇 Q 手型工具(鼠標中鍵): 上下左右移動場景 ALT + 鼠標左鍵: 以視圖為中心旋轉 鼠標右鍵: 以觀察者為中心旋轉 SHIFT + Gizmo方塊: Y軸歸位 物體節(jié)點 + F: 觀察者定位至物體 3D項目一般窗口布局如下 全局光照GI(Glballlumination)(編輯模式下才能生成

    2024年02月09日
    瀏覽(58)
  • 【C++】如果你準備學習C++,并且有C語言的基礎,我希望你能簡單的過一遍知識點。

    【C++】如果你準備學習C++,并且有C語言的基礎,我希望你能簡單的過一遍知識點。

    相關視頻——黑馬程序員匠心之作|C++教程從0到1入門編程,學習編程不再難_嗶哩嗶哩_bilibili(1-83) 我的小站——半生瓜のblog 我知道這個視頻早已經(jīng)被很多人學習并且記錄筆記,但是我還是想再過一遍前面的基礎知識點,所以我這個筆記會非常的簡潔,適合有C語言基礎的小伙

    2024年02月01日
    瀏覽(27)
  • Vue2簡單使用及相關基礎知識概念(適合小白入門,看完就能上手)

    Vue2簡單使用及相關基礎知識概念(適合小白入門,看完就能上手)

    MVC模式(同步通信為主):Model、View、Controller MVP模式(異步通信為主):Model、View、Presenter MVVM模式(異步通信為主):Model、View、ViewModel(目前主要的模式) 2.1 概念 MVVM是一種軟件架構設計模式。MVVM的核心是ViewModel層,負責轉換Model層中的數(shù)據(jù)對象來讓數(shù)據(jù)變得更加容易

    2024年02月07日
    瀏覽(20)
  • SAP Fiori開發(fā)中的JavaScript基礎知識15 - 原型,object,constructor,class,繼承

    SAP Fiori開發(fā)中的JavaScript基礎知識15 - 原型,object,constructor,class,繼承

    本文將介紹JavaScript中的核心概念 - 原型,并會介紹基于原型的應用場景object,constructor,class,繼承。 本文會將這幾個核心概念匯總在一篇博客中,因為這些概念是觸類旁通的,希望對你有幫助。 在JavaScript中,幾乎所有的東西都是對象,每個對象都有一個 特殊的內部屬性

    2024年04月23日
    瀏覽(43)
  • 簡單了解 HTTP 基礎知識

    簡單了解 HTTP 基礎知識

    HTTP(Hypertext Transfer Protocol,超文本傳輸協(xié)議)是用于在網(wǎng)絡上傳輸數(shù)據(jù)的一種協(xié)議,對于網(wǎng)絡開發(fā)人員來說,理解這一協(xié)議是至關重要的。由于其廣泛的應用,除了在網(wǎng)頁應用傳輸數(shù)據(jù)之外,它還被應用于物聯(lián)網(wǎng)(IoT)中的數(shù)據(jù)和命令傳輸。 HTTP 協(xié)議的第一個版本只有一個方

    2024年04月17日
    瀏覽(22)
  • [C++]C++基礎知識概述

    [C++]C++基礎知識概述

    ? 目錄 C++基礎知識概述:: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1.什么是C++ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2.C++發(fā)展史? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3.C++ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?4.命名空間 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

    2023年04月16日
    瀏覽(27)
  • 網(wǎng)絡基礎知識(2)——簡單說說IP地址

    網(wǎng)絡基礎知識(2)——簡單說說IP地址

    ????????Internet 依靠 TCP/IP 協(xié)議,在全球范圍內實現(xiàn)不同硬件結構、不同操作系統(tǒng)、不同網(wǎng)絡系統(tǒng)的主機之間的互聯(lián)。在 Internet 上,每一個節(jié)點都依靠唯一的 IP 地址相互區(qū)分和相互聯(lián)系,IP 地址用于標識互聯(lián)網(wǎng)中的每臺主機的身份,設計人員為每個接入網(wǎng)絡中的主機都分

    2024年02月04日
    瀏覽(19)
  • 鏈表基礎知識詳解(非常詳細簡單易懂)

    鏈表基礎知識詳解(非常詳細簡單易懂)

    ? ? ? 鏈表作為 C 語言中一種基礎的數(shù)據(jù)結構,在平時寫程序的時候用的并不多,但在操作系統(tǒng)里面使用的非常多。不管是RTOS還是Linux等使用非常廣泛,所以必須要搞懂鏈表,鏈表分為單向鏈表和雙向鏈表,單向鏈表很少用,使用最多的還是雙向鏈表。單向鏈表懂了雙向鏈表

    2024年02月03日
    瀏覽(18)
  • C++ | 語句的基礎知識(夯實基礎)

    C++ | 語句的基礎知識(夯實基礎)

    本篇文章主要介紹數(shù)據(jù)結構中 C++ 的語句內容,適合有 零基礎 的同學,文中描述和代碼示例很詳細,干貨滿滿,感興趣的小伙伴快來一起學習吧! ??大家好!我是新人博主朦朧的雨夢,希望大家多多關照和支持?????? ??大家一起努力,共同成長,相信我們都會遇到更好

    2024年02月05日
    瀏覽(22)
  • Unity C# 之 使用 HttpWebRequest 基礎知識/HttpWebRequest 進行異步Post 網(wǎng)絡訪問/數(shù)據(jù)流形式獲取數(shù)據(jù)(Task/async/await)的代碼簡單實現(xiàn)

    Unity C# 之 使用 HttpWebRequest 基礎知識/HttpWebRequest 進行異步Post 網(wǎng)絡訪問/數(shù)據(jù)流形式獲取數(shù)據(jù)(Task/async/await)的代碼簡單實現(xiàn)

    目錄 Unity C# 之 使用 HttpWebRequest 基礎知識/HttpWebRequest 進行異步Post 網(wǎng)絡訪問/數(shù)據(jù)流形式獲取數(shù)據(jù)(Task/async/await)的代碼簡單實現(xiàn) 一、簡單介紹 二、實現(xiàn)原理 三、注意事項 四、效果預覽 五、關鍵代碼 附錄 : HttpWebRequest 的一些基礎知識 1、HttpWebRequest 常用屬性 2、HttpWebRequest?

    2024年02月05日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包