C++類的基本學習知識

面對對象:將系統看成對象的集合,對象之間通過交互作用來完成系統特定功能;
面對對象編程的特點:繼承、封裝、多態;
進入主題:
1.類的聲明
class 類名稱{
public:
公有成員(外部接口,允許來自類外的訪問)
private:
私有成員(只允許本類的函數訪問,類外部的任何函數不能訪問)
protected:
保護成員(與private類似,差別表現在繼承與派生)
}
2.成員函數
demo1.cpp

#include<iostream>
using namespace std;
class Test{
public:
	int x_;
	void init(int x,int y,int z);
	void display(){
		cout<<x_<<endl;
	};
private:
	int y_;
protected:
	int z_;
};
void Test::init(int x,int y,int z){
	x_=x;
	y_=y;
	z_=z;
}
int main(){
	Test t;
	t.init(1,2,3);
	t.display();
	return 0;
}

類內實現成員函數叫做內聯函數:如display();
類外實現成員函數:Test::init()
標準寫法:Test.h-放類的聲明
Test.cpp-放類的定義
main.cpp-主函數
3.class VS struct
class數據成員默認私有
struct數據成員默認公有
demo2.cpp

#include<iostream>
using namespace std;
class Test{
 int x_;
 int y_;
 int z_;
};
struct Test1{
 int x_;
 int y_;
 int z_;
 void initXYZ(int x,int y,int z){
  x_=x;
  y_=y;
  z_=z;
 }
};
int main(){
 Test t1;
 Test1 t2;
 //t1.x_=5;私有成員,必須通過成員函數來進行訪問
 t2.x_=5;
 t2.initXYZ(6,7,8);
 cout<<sizeof(t1)<<endl;
 cout<<sizeof(t2)<<endl;
 system("pause");
 return 0;
}

輸出結構一致,都爲12;對象大小與成員函數無關,只與成員變量有關;
當加入一個char成員時,結果變爲16,類遵循字對齊
4.對象的存儲模型
this 指針的作用:成員方法是共享的,怎麼辨別是哪個對象調用的方法?
this指針保存調用方法對象的地址
5.類的作用域
前項聲明:可以只聲明而不定義它。這個聲明有時被稱爲前向聲明。在聲明之後,定義之前,類是一個不完全類型,即只知是一個類,但不知道類中具體包含哪些成員。不完全類型只能以有限方式使用,不能實例化,只能用於定義指向該類型的指針及引用,或者用於聲明使用該類型作爲形參類型或者返回類型的函數。

class A;
class B{
	public:
	A* m_a;//不能用A m_a
}

#include "A.h"
class B{
	public:
	A* m_a;//(或者A m_a)
}

前向聲明的好處是:
不必要的#include 會增加編譯時間.
混亂隨意的#include可能導致循環#include,可能編譯錯誤;
6.嵌套和局部類
從作用域看,嵌套類被隱藏在外圍類之中,只能在外圍類中使用。如果在外圍類的作用域使用時,需要加名字限定。
嵌套類中的成員函數可以在它的類體外定義
嵌套類的成員函數對外圍類沒有訪問權,反之亦然
嵌套類僅僅是語法上的嵌入
demo4.c

#include<iostream>
using namespace std;
class Test{
public:
	int x_;
	class Inner{
	public:
		int num;
		void func()
	};
};
void Test::Inner::func(){
	cout<<"hello world!"<<endl;
}
int main(){
	class LocalClass//局部類
	{
		void func(){
		}
	};
	Test t;
	Test::Inner n;//定義嵌套類對象
	t.x_==1;
	cout<<t.x_<<endl;
	n.num=2;//訪問嵌套類的成員
	cout<<n.num<<endl;
	n.func();//訪問嵌套類的成員方法
	return 0;
}

7.局部類
定義在函數體內的類爲局部類,只在定義它的局部域可見。局部類的成員函數不惜被定義在類體中。
局部類中不能有靜態成員。

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