C 建構函式定義不同的許可權

2021-08-28 13:05:35 字數 1646 閱讀 2643

c++類和c++結構體的主要的區別就在於:c++類有訪問許可權的控制而c++結構體預設的所有的訪問許可權是public的。

大家都知道c++類都有建構函式,即使在編寫**的時候沒有顯示的寫上c++建構函式,c++也會給每個類提供乙個預設的建構函式,許可權是public。

c++類中定義public許可權的成員,無論是在類內部還是在物件中都可以直接呼叫。

定義protected許可權的成員,子類的內部可以成員可以直接呼叫,但是子類物件是無法直接呼叫的。

定位private許可權的成員,只能在本類內部可以直接呼叫,類物件和子類都無法直接呼叫。

#pragma once

class basea ;

#include "basea.h"

basea::basea()

basea::basea(int x)

basea::basea(int x, int y)

basea::~basea()

#include #include "basea.h"

#include "childa.h"

int main(int argc, char *argv)

對於乙個c++類的建構函式定義成protected,那麼子類或者及其物件怎麼樣呢?

#pragma once

#include "basea.h"

class childa :public basea ;

#include "childa.h"

childa::childa()

childa::childa(int a):basea(a)

childa::childa(int a, int b) : basea(a,b)

childa::~childa()

1.使用靜態方法訪問

2.使用友元類訪問

使用靜態類訪問:

#pragma once

class basea ;

#include "basea.h"

basea* basea::instance = new basea;

basea::basea()

basea::~basea()

basea* basea::getinstance()

這個例子也是設計模式總的單例模式,屬於「餓漢式」

使用友元類

#pragma once

class frienda ;

#include "frienda.h"

#include "basea.h"

frienda::frienda()

frienda::~frienda()

void frienda::createbase()

#pragma once

class basea ;

#include "basea.h"

#include basea::basea()

basea::~basea()

#include #include "basea.h"

#include "frienda.h"

int main(int argc, char *argv)

定義拷貝建構函式必須同時定義建構函式

今天測試static cast 時發現乙個類如果只有拷貝建構函式是不能通過編譯的,下面給個例子 class a public a const a ref cout error c2512 a 沒有合適的預設建構函式可用 解決方法 給a新增合適的建構函式。下面給出新增了建構函式的 並測試了static...

建構函式的定義和建構函式的過載

建構函式 處理物件的初始化,是一種特殊的成員函式,與其他函式不同,不需要使用者來呼叫它,在建立物件時自動執行。注意 1 每建立乙個物件,就呼叫一次建構函式 2 建構函式沒有返回值,因此也沒有型別,作用只是對物件進行初始化 3 建構函式不需要被使用者呼叫,也不能被使用者呼叫。建構函式的過載 建構函式具...

c 中不同場景建構函式的次序問題

1.普通類的建構函式 1 首在定義類時傳引數指標this到建構函式 2 按類中資料成員宣告的次序一一進行分配記憶體空間並初始化 3 執行建構函式的函式體 普通類的析構函式 1 首先執行函式體 2 對成員變數釋放空間 2.繼承與派生的建構函式 1 首在定義類時傳引數指標this到建構函式 2 依照基類...