【C++學習筆記】----類和對象(下篇)

一.參考代碼

#include<iostream>
using namespace std;
//初始化列表
//class B {
//public:
//	B(int a,char b)
//		:_a(a)
//		,_b(b)
//	{
//		cout << "B()" << endl;
//	}
//private:
//	int _a;//4
//	char _b;//1
//};
//class A {
//public:
//	A(int year,int month,int day,int hour,char b,int c)
//		:_year(year)
//		,_month(month)
//		,_day(day)
//		,_b(hour,b)
//		,_c(c)
//		,_d(1)
//	
//	{
//		cout << "A()" << endl;
//	}
//	/*class D {///內部類
//	public:
//		D() {
//			_h;//可以訪問靜態成員變量
//		}
//	private:
//		int _g;
//	};*/
//
//	void Display() {
//		cout << _year << _month << _day << endl;
//	}
//private:
//	int _year;//4
//	int _month;//4
//	int _day;//4
//	static int _h;//4在靜態區,不計算到A類大小裏面
//	//必須初始化的成員變量
//	B _b;//內存對齊之後是8
//	int& _c;//4
//	const int _d;//4
//	
//};
//int A::_h = 1;
//class C
//{
//public:
//	explicit C(int j, int w, int z)
//		//:_f(f)//構造 函數無法初始化靜態數據
//		:_j(j)
//		, _w(w)
//		,_z(z)
//	{}
//	void Display() {
//		cout << _j <<_w<<_z<< endl;
//	}
//private:
//	static int _f;//靜態的數據在,靜態區存儲
//	int _j;
//	int _k;
//	int _w;
//	int _z;
//};
//int C::_f = 1;


//class A {
//public:
//	A() { 
//		cout << "A()" << endl;
//		++_scount;
//	}
//	A(const A& t) { 
//		cout << "A()拷貝" << endl;
//		++_scount; 
//	}
//	static int GetACount() { return _scount; }
//private:
//	static int _scount;
//};
//int A::_scount = 0;
//void TestA()
//{
//	cout << A::GetACount() << endl;
//	A a1, a2;
//	A a3(a1);
//	cout << A::GetACount() << endl;
//}
int main() {
	//char a= 'a';
	//A d(0,0,0,a,0,0);
	//d.Display();
	//C c(1,2,3);
	//c.Display();
	//C d = (1,2);
	//d.Display();
	//cout << sizeof(A) << endl;
	//cout << sizeof(C) << endl;//1
	//TestA();
	system("pause");
	return 0;
}

二.歸類整理

1.再談構造函數

(1).構造函數完成的是成員變量的初始化,初始化只有一次,我們之前完成的可以叫做成員變量的賦值,可以多次調用賦值。
(2).構造函數構造時的順序,是根據成員變量定義的順序。
(3).自定義函數最先初始化。
(4).const 修飾 引用 自定義類型(沒有默認構造函數) 必須在初始化列表初始化。
在這裏插入圖片描述

2.友元類

(1).友元關係是單項的,友元關係不能傳遞。
(2).友元類實現了在類外面訪問,某些友元的私有成員。

3.內部類

(1).定義在類內部的類成爲內部類。
(2).計算類大小的時候,內部類不算進去,並且static 修飾的成員變量也不算進去,因爲它在靜態區,初始化需要在類外初始化,並且可以被內部類直接調用。
在這裏插入圖片描述

(3).內部類就是外部類的友元類,可以直接訪問外部類的成員函數,和成員變量。

4.static成員

(1).static修飾的成員變量,屬於全局域,存在靜態區,必須在類外面定義。
(2).static修飾的成員函數,可以直接通過類名加作用域限定符調用。
(3).靜態成員函數沒有this指針,所以不能訪問非靜態成員。
(4).靜態成員和類裏面的普通成員變量一樣。

5.explicit關鍵字

(1).構造函數不僅可以構造與初始化對象,對於單個參數的構造函數,還具有類型轉換的作用。
在這裏插入圖片描述
加了explicit關鍵字後,就防止隱式類型轉化。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章