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 依照基類...