C++中對類和對象基礎理解
C++不是純面向對象的編程語言,而是基於面向對象的語言,因爲C++中包含C語言的部分,而C語言是面向過程的。
面向對象的三大特性:封裝、繼承、多態。
封裝:將方法和數據封裝在類裏面,可以根據訪問限定符的使用保證數據的安全性,隱藏了方法的實現細節,也方便使用。
繼承:對已有類增加屬性和功能或進行部分修改來建立新的類,是實現代碼的複用的重要手段,繼承是類型之間的關係建模。
多態:在面向對象的程序裏面,同一個消息被不同的對象接受後可以導致不同的行爲,是接口的多種不同的實現方式。
這裏先介紹類的重載性部分。
訪問限定符解釋
(1)public成員可以直接從類外部訪問,private/protected成員不可以從類外部直接訪問。
(2)每個限定符在類中可以使用多次,一個限定符的作用域是下一個訪問限定符或類結束前。
(3)類裏面如果沒有多成員指定訪問限定符,則默認爲私有的。
下面我們引入一個簡單類的例子加深理解
其中成員函數也可以在類內部聲明,在類外部定義。
class Student
{
public:
void Display();
private:
char* _name;
char* _sex;
int _num;
};
void Student::Display()
{
cout << "姓名:" << _name << endl;
cout << "性別:" << _sex << endl;
cout << "學號:" << _num << endl;
}
類的實例化對象(爲了方便舉例,這裏將成員變量定義爲公有的)
void Test()
{
Student s;
s._name = "小紅";
s._sex = "女";
s._num = 01;
s.Display();
}
類只是一個模型一樣的東西,只想定了該類中有哪些成員,定義出一個類並沒有分配實際的內存空間,類就像現實生活中建築設計中的圖紙,只需要設計出需要些什麼東西,真正佔用空間,能實際存儲數據的是實例化出的對象。
類的存儲對象模型
一個對象的大小等於類中所有成員變量的大小之和(遵循內存對其規則),空類的大小爲1。
類的六個默認成員函數
下面直接用日期類的例子解釋這前四個常用的默認成員函數
class Date
{
public:
Date(int year, int month, int day)//構造函數
{
_year = year;
_month = month;
_day = day;
}
Date(const Date& d)//拷貝構造函數
{
_year = d._year;
_month = d._month;
_day = d._day;
}
Date& operator = (const Date& d)//賦值運算符重載
{
if (this != &d)
{
this->_year = d._year;
this->_month = d._month;
this->_day = d._day;
}
return *this;
}
~Date()//析構函數
{
cout << " ~Date() " << endl;
}
private:
int _year;
int _month;
int _day;
};