1. 程式人生 > >C++ 三種繼承方式和建構函式執行的順序

C++ 三種繼承方式和建構函式執行的順序

C++中的繼承方式有:

  public、private、protected三種(它們直接影響到派生類的成員、及其物件對基類成員訪問的規則)。
  (1)public(公有繼承):繼承時保持基類中各成員屬性不變,並且基類中private成員被隱藏。派生類的成員只能訪問基類中的public/protected成員,而不能訪問private成員;派生類的物件只能訪問基類中的public成員。
  (2)private(私有繼承):繼承時基類中各成員屬性均變為private,並且基類中private成員被隱藏。派生類的成員也只能訪問基類中的public/protected成員,而不能訪問private成員;派生類的物件不能訪問基類中的任何的成員。 


  (3)protected(保護性繼承):繼承時基類中各成員屬性均變為protected,並且基類中private成員被隱藏。派生類的成員只能訪問基類中的public/protected成員,而不能訪問private成員;派生類的物件不能訪問基類中的任何的成員。

C++中的建構函式執行順序有:

1.虛基類的建構函式;虛基類建構函式如果有多個,虛基類則建構函式的呼叫順序是某類在類派生表中出現的順序而不是它們在成員初始化表中的順序; 

2、建立派生類的物件,基類的建構函式函式優先被呼叫(也優先於派生類裡的成員類);基類建構函式如果有多個,基類則建構函式的呼叫順序是某類在類派生表中出現的順序而不是它們在成員初始化表中的順序; 



3、如果類裡面有成員類,成員類的建構函式優先被呼叫;成員類物件建構函式如果有多個成員類物件則建構函式的呼叫順序是物件在類中被宣告的順序而不是它們出現在成員初始化表中的順序; 

4、派生類建構函式 
作為一般規則派生類建構函式應該不能直接向一個基類資料成員賦值而是把值傳遞 給適當的基類建構函式否則兩個類的實現變成緊耦合的(tightly coupled)將更加難於正確地修改或擴充套件基類的實現。(基類設計者的責任是提供一組適當的基類建構函式)。

相關推薦

C++ 繼承方式建構函式執行順序

C++中的繼承方式有:   public、private、protected三種(它們直接影響到派生類的成員、及其物件對基類成員訪問的規則)。  (1)public(公有繼承):繼承時保持基類中各成員屬性不變,並且基類中private成員被隱藏。派生類的成員只能訪問基類中的

繼承方式訪問權限

-a prot play 9.png png -h .cn orm font 也就是說子類只能訪問父類的保護和公有成員,而對象只能訪問公有成員。繼承方式 1. 三種繼承方式不影響子類對父類的訪問權限,子類對父類只看父類的訪問控制權。 2. 繼承

C++: 繼承多型(一)繼承方式與許可權

繼承 在C++中,我們常要對某個函式進行多次複用,例如: 資訊管理系統中,對於教師、學生、教務人員等"類"而言,有部分資訊是通用的:姓名,性別,年齡,聯絡方式等。如果為每一種角色都編寫一個"類",會有不少重複的程式碼,造成效率上的浪費。       &nbs

類的繼承方式可訪問性友元函式.cpp

/*類的三種繼承方式可訪問性和友元函式 */# include <iostream> using namespace std;class A{        friend int get(const A& a);//宣告該函式為A的友元函式,使之可以在外部訪問A,友元函式也可以繼承publ

C++中類的繼承方式public(公有繼承)、protected(保護繼承)、private(私有繼承)之間的差別(附思維導圖)【轉】

(轉自:https://blog.csdn.net/coco56/article/details/80467975) 注:若不指明繼承方式,則預設是私有繼承。 一:對於公有繼承(public)方式: 基類的public和protected成員的訪問屬性在派生類中保持不變,但基類的p

常量的定義方式static在c語言中的修飾

c語言的常量在執行期間為固定值,在定義後無法被修改常量可以是任何的資料基本型別,可以為整形,浮點常量,字元和字串常量1,使用const關鍵字2, 使用巨集定義3,使用列舉常量   列舉: 1 #include<stdio.h> 2 int main(){ 3 e

C++的訪問許可權與繼承方式

三種訪問許可權 我們知道C++中的類,有三種訪問許可權(也稱作訪問控制),它們分別是public、protected、private。要理解它們其實也很容易,看下面了一個例子。 父類: class Person { public: Person

併發伺服器實現方式之程序、執行select

  前言:剛開始學網路程式設計,都會先寫一個客戶端和服務端,不知道你們有沒有試一下:再開啟一下客戶端,是連不上服務端的。還有一個問題不知道你們發現沒:有時啟伺服器,會提示“Address already in use”,過一會就好了,想過為啥麼?在這篇部落格會解釋這個問題。   但現實的伺服器都會連很多客戶

c++中初始化列表建構函式初始化

初始化和賦值對內建型別的成員沒有什麼的的區別,在成員初始化列表和建構函式體內進行,在效能和結果上都是一樣的。對非內建型別成員變數,因為類型別的資料成員的資料成員物件在進入函式體前已經構造完成,也就是說在成員初始化列表處進行構造物件的工作,呼叫建構函式,在進入函式體之後,進行的是對已經構造好的類物件的賦值,又呼

11 CSS的引入方式基本選擇器

<!-- 整體說明: 1.CSS的三種引入方式 (1)行內樣式 (2)內接樣式 (3)外接樣式 2.CSS的基本選擇器 (1)id選擇器 (引用方式:#id) (2)標籤選擇器(引用方式:標籤名字) (3)類選擇器(引用方式:.類名) 3.CSS的高階選擇器 (1)後代選擇器 (2)子代選擇器 (

類的繼承方式

類的繼承方式——公有型(public)、保護型(protected)、私有型(private), 訪問控制修飾符也有public、protected、private3種類型。繼承方式不同,可訪問性也不同

CXF的釋出方式客戶端呼叫方法

先定義一個web service @WebService(targetNamespace="http://www.itfad.net/queryUser") public interface IQueryUser { String query(@WebParam(nam

js物件的繼承方式

一,js中物件繼承 js中有三種繼承方式 1.js原型(prototype)實現繼承 複製程式碼 程式碼如下: <SPAN style="BACKGROUND-COLOR: #ffffff"><SPAN style="FONT-SIZE: 18px">

類的繼承方式的訪問許可權.

    每次寫類需要用到繼承關係的時候我都習慣性的用public,而有些時候用其它兩種繼承方式(保護繼承和私有繼承)還是比較方便的,但是自己但是就是想不起來用,看到別人用它而設計出的類機構很好的時候遊羨慕不已,我以前學習C++的時候也注意過這兩種繼承方式各個區域(public

繼承(派生類的繼承方式,多重繼承,虛繼承

  繼承性是面向物件程式設計的第二大特性,它允許在既有類的基礎上建立新類,新類可以繼承既有類的資料成員和成員函式,可以新增自己特有的資料成員和成員函式,還可以對既有類中的成員函式重新定義。利用類的繼承和派生實現了更高層次的程式碼可重用性,符合現代軟體開發的思想。    

js的繼承方式及其優缺點

第一種,prototype的方式: //父類 function person(){ this.hair = 'black'; this.eye = 'black'; this.skin = 'yellow';

繼承方式訪問許可權的相互組合

        對基類進行繼承時,三種繼承方式下,基類的三種訪問許可權在子類中會有如何的變化這個問題,本科時上C++這門課的時候曾仔細的分析並弄得挺清楚,後來時間久了、用的也不多,慢慢的又變得心裡不太有譜了。這次接著準備面試的契機,又重新仔細分析了一番,留個案底,以免再犯糊塗

繼承方式

1、關於公有繼承,子類的物件可以直接訪問基類的公有的函式或者變數。 基類成員對派生類的可見性對派生類來說,基類的公有成員和保護成員可見,基類的公有成員和保護成員作為派生類的成員時,他們保持原有狀態,基類的私有成員不可見,基類的私有成員仍然是私有的,派生類不可以訪問基類的私

oracle中Normal,sysdba,sysoper連線方式使用者sys,system,sysdba,scott

sys和system使用者的區別 【system】使用者只能用normal身份登陸em。 【sys】使用者具有“SYSDBA”或者“SYSOPER”許可權,登陸em也只能用這兩個身份,不能用normal。 “SYSOPER”許可權,即資料庫操作員許可權,許可權包括:   開啟資料庫伺服器   關閉資料庫伺服

執行緒---建立方式例項;以及執行緒池的使用

1、繼承Thread類 繼承Thread類,重寫run方法(即要讓執行緒進行的操作), 建立執行緒例項,呼叫start()方法啟動執行緒。 import java.util.Date; /** * @author: ycz * @date: 2018/11/25 0025