C++之面向對象模型

C++對象模型可以概括為以下2部分:
1. 語言中直接支持面向對象程序設計的部分,主要涉及如構造函數、析構函數、虛函數、繼承(單繼承、多繼承、虛繼承)、多態等等。
2. 對于各種支持的底層實現機制。
在c語言中,“數據”和“處理數據的操作(函數)”是分開來聲明的,也就是說,語言本身并沒有支持“數據和函數”之間的關聯性。在c++中,通過抽象數據類型(abstract data type,ADT),在類中定義數據和函數,來實現數據和函數直接的綁定。
概括來說,在C++類中有兩種成員數據:static、nonstatic;三種成員函數:static、nonstatic、virtual。
這里寫圖片描述

C++中的class從面向對象理論出發,將變量(屬性)和函數(方法)集中定義在一起,用于描述現實世界中的類。從計算機的角度,程序依然由數據段和代碼段構成。
C++編譯器如何完成面向對象理論到計算機程序的轉化?
換句話:C++編譯器是如何管理類、對象、類和對象之間的關系
具體的說:具體對象調用類中的哪種方法,c++編譯器是如何區分,是哪個具體的類,調用哪個方法?
1)C++類對象中的成員變量和成員函數是分開存儲的
成員變量:
普通成員變量:存儲于對象中,與struct變量有相同的內存布局和字節對齊方式
靜態成員變量:存儲于全局數據區中
成員函數:存儲于代碼段中。
問題出來了:很多對象共用一塊代碼?代碼是如何區分具體對象的?
2、C++中類的普通成員函數都隱式包含一個指向當前對象的this指針。
3、靜態成員函數、成員變量屬于類
靜態成員函數與普通成員函數的區別:
靜態成員函數不包含指向具體對象的指針
普通成員函數包含一個指向具體對象的指針
具體例子:

#include <stdio.h>class Test13
{
public:Test13 (int a, char ch){m_a = a;m_ch = ch;}void print (){printf ("a = %d, c = %c\n", m_a, m_ch);}static void printA(){printf ("a = %d\n", sm_b);}
private:int  m_a;char m_ch;static int sm_b;
};int Test13::sm_b = 100;int main13_1()
{printf ("size = %d\n", sizeof(Test13));Test13 t1(10,'a'), t2(20,'b');t1.print();t2.print();return 0;
}class Test13_1
{
public:// C++類的成員方法中有一個隱藏的 this 指針,指向當前的對象Test13_1(int a, int b){this->a = a;this->b = b;}void func(){a = 10;}void print() const;  // void print (const Test13_1 * const this)
private:int a;int b;
};void Test13_1::print() const
{// this->a = 10;printf ("a = %d, b = %d\n", this->a, this->b);
}int main()
{Test13_1 t(10,20), t2(30,40);t.print();t2.print();return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448388.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448388.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448388.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

netty接收大文件的方法

參考:http://blog.csdn.net/linuu/article/details/51371595 https://www.jianshu.com/p/a0a51fd79f62 netty默認是只能接收1024個字節&#xff0c;但是我們要傳輸大文件怎么辦&#xff1f; 上代碼&#xff1a; 改之后服務端&#xff1a; package server;import io.netty.boots…

制動失靈

定義 制動過程中&#xff0c;由于制動器某些零部件的損壞或發生故障&#xff0c;使運動部件(或運動機械)不能保持停止狀態或不能按要求停止運動的現象。制動失靈的原因 制動失靈的關鍵在于制動系統無法對汽車施加足夠的制動力&#xff0c;包括制動液管路液位不足或進入…

webpack 入門,說一下那些不入流的知識點、module.exports{ } 中配置說明

先說說Vue-Cli&#xff08;Vue項目腳手架&#xff09; 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 關于它能干什么&#xff0c;就不再贅述了&#xff0c;我們主要談談生成的與webp…

myeclipse2013 jad反編譯插件安裝

https://blog.csdn.net/zhenshixian88/article/details/26454319 1. 下載插件工具 http://download.csdn.net/detail/zwj_lmss/6697259 2. 里面有兩個文件 1).JAD.EXE隨便找個地方丟進去(我是隨便放哪邊的,不過有的人有問題,最后放在了jdk的bin下面.可能他們沒有配置環境變量);…

轉向失控

定義 轉向失控就是方向盤不管用了&#xff0c;打方向盤&#xff0c;但是前輪不動&#xff0c;不受方向盤控制。轉向失控的原因 轉向失控可能因為車輛過快、酒駕、疲勞、車況不佳、雨雪路滑等&#xff0c;還有轉向機構中有零部件脫落、損壞、卡滯時&#xff0c;也會使轉向機…

this 的指向問題

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 this的指向已經是一個老生常談的問題&#xff0c;每逢面試都要去復習復習&#xff0c;近來鞏固js的基礎&#xff0c;決心徹底掌握這個知…

C++之全局函數和成員函數的轉換

全局函數和成員函數 把全局函數轉化成成員函數&#xff0c;通過this指針隱藏左操作數 Test add(Test &t1, Test &t2)》Test add(Test &t2) 把成員函數轉換成全局函數&#xff0c;多了一個參數 void printAB()》void printAB(Test *pthis) 函數返回元素和返回引…

HDU 3916 Sequence Decomposition 【貪心】

這道題目的題意就是使用題目中所給的Gate 函數&#xff0c;模擬出輸入的結果 當然我們分析的時候可以倒著來&#xff0c;就是拿輸入去減 每次Gate 函數都會有一個有效范圍 這道題目求的就是&#xff0c;找出一種模擬方法&#xff0c;使得最小的有效范圍最大化。 是一道【貪心】…

爆胎

定義 即輪胎爆裂。車輛的缺氣(輪胎胎壓低于標準胎壓)行駛時&#xff0c;隨著胎壓的下降&#xff0c;輪胎與地面的摩擦成倍增加&#xff0c;胎溫急劇升高&#xff0c;輪胎變軟&#xff0c;強度急劇下降。這種情況下&#xff0c;如果車輛高速行駛&#xff0c;就可能導致爆胎。…

不要再問我跨域的問題了

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 跨域這兩個字就像一塊狗皮膏藥一樣黏在每一個前端開發者身上&#xff0c;無論你在工作上或者面試中無可避免會遇到這個問題。為了應付面…

SSM集合

SSM集成 1. Spring和各個框架的整合 Spring目前是JavaWeb開發中最終的框架&#xff0c;提供一站式服務&#xff0c;可以其他各個框架整合集成 Spring整合方案 1.1. SSH ssh是早期的一種整合方案 Struts2 &#xff1a; Web層框架 Spring &#xff1a; 容器框架 Hibernate &#…

淺談 CSRF 攻擊方式

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一.CSRF是什么&#xff1f; CSRF&#xff08;Cross-site request forgery&#xff09;&#xff0c;中文名稱&#xff1a;跨站請求偽造&a…

C++之運算符重載(上)

1、概念 所謂重載&#xff0c;就是重新賦予新的含義。函數重載就是對一個已有的函數賦予新的含義&#xff0c;使之實現新功能&#xff0c;因此&#xff0c;一個函數名就可以用來代表不同功能的函數&#xff0c;也就是”一名多用”。 運算符也可以重載。實際上&#xff0c;我們…

手剎

定義 考手剎的專業稱呼是輔助制動器&#xff0c;與制動器的原理不同&#xff0c;其是采用鋼絲拉線連接到后制動蹄上&#xff0c;以對車子進行制動。作用 用于平地斜坡停車時制動&#xff0c;防止車子在無人狀態下自動滑跑&#xff0c;逼免發生交通事故。工作原理 其原…

關于[super dealloc]

銷毀一個對象時&#xff0c;需要重寫系統的dealloc方法來釋放當前類所擁有的對象&#xff0c;在dealloc方法中需要先釋放當前類中所有的對象&#xff0c;然后再調用[super dealloc]釋放父類中所擁有的對象。如先調用[super dealloc]將釋放掉父類中所擁有的對象&#xff0c;當前…

C++之運算符重載(下)

4.提高 1.運算符重載機制 編譯器實現運算符重載實際上就是通過函數重載實現的&#xff0c;可分為全局函數方式&#xff0c;也可分為成員函數方式進行重載&#xff0c;并沒有改變原操作符的屬性和語義。只是針對某個特定類定義一種新的數據類型操作。 2.重載賦值運算符 賦值…

Cookie / Session 的機制與安全

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Cookie和Session是為了在無狀態的HTTP協議之上維護會話狀態&#xff0c;使得服務器可以知道當前是和哪個客戶在打交道。本文來詳細討論C…

手動擋

定義 手動擋&#xff0c;即用手撥動變速桿才能改變變速器內的齒輪嚙合置&#xff0c;改變傳動比&#xff0c;從而達到變速的目的。作用 一方面提供了手動的樂趣 另外一方面就是通過手動自主控制轉速&#xff0c;還可以遲延或提前換檔。駕駛技巧 市區內應直視前方五…

Servlet快速入門及運行流程

一、Servlet快速入門 1.創建一個web工程 2.在JavaResource中src下創建一個包名稱為com.myxq.servlet 3.在創建的servlet包當中創建一個class文件起名為FirstServlet 4.進入該class實現一個Servlet接口&#xff0c;實現它未實現的方法 重點看service方法在該方法當中寫入一句話進…

C++之多繼承

1.基礎知識 1.1 類之間的關系 has-A&#xff0c;uses-A 和 is-A has-A 包含關系&#xff0c;用以描述一個類由多個“部件類”構成。實現has-A關系用類成員表示&#xff0c;即一個類中的數據成員是另一種已經定義的類。 常和構造函數初始化列表一起使用 uses-A 一個類部分地…