C++面向物件(基礎)
阿新 • • 發佈:2018-12-21
1.建構函式
用例例項化物件的時候呼叫的成員方法:
建構函式沒有返回值,函式名與類名同名,引數沒有規定(根據需要)
例項化物件的時候必須呼叫建構函式
一旦自己內有實現建構函式,編譯器就會為我們自動預設生成一個建構函式
預設的建構函式就是沒有引數的建構函式
示例如下:
class Person { private: char *_name; bool _sex; int _age; public: //建構函式 函式名必須和類名同名 Person(const char *name, bool sex, int age) { cout << "Person(const char *name, bool sex, int age)" << endl; _name = new char[strlen(name) + 1]; strcpy_s(_name, strlen(name) + 1, name); _sex = sex; _age = age; } Person() //系統預設自動生成沒有引數的函式 { _name = NULL; cout << "Person()" << endl; } }
2.this指標
this指標:指向物件的指標
在成員方法呼叫的時候預設傳入一個this指標
在成員方法申明/定義的地方,預設加上this指標引數
在成員方法中使用成員變數的地方加上this->
程式碼示例:
void eat(/*Person * const this*/) //呼叫的時候預設傳入一個this指標
{
//this = NULL;
cout << this->_name << "::::eat" << endl;
}
3.拷貝建構函式
拷貝建構函式: 用已存在的相同型別的物件去構造新物件 如果不是自己拷貝,編譯器則會自己預設生成一個拷貝建構函式 預設生成的拷貝建構函式只進行值的拷貝
程式碼示例如下:
Person(const Person& src) //這裡必須加一個&,讓系統判定為傳入的引數是指標
{
cout << "Person(Person& src)" << endl;
//防止淺拷貝
_name = new char[strlen(src._name) + 1];
strcpy_s(_name, strlen(src._name) + 1, src._name);
_sex = src._sex;
_age = src._age;
}
4.等號運算子過載函式
等號運算子過載函式: 用一個已經存在的物件賦值給另一個已經存在的物件 如果自己不實現,則編譯器會自己預設生成一個淺拷貝的 = 注意:防止自賦值 防止記憶體洩漏 防止淺拷貝
程式碼示例如下:
Person& operator=(const Person& src)
{
cout << "=====" << endl;
//防止自賦值
if (this == &src)
{
return *this;
}
//防止記憶體洩漏
if (NULL != _name)
delete[]_name;
//防止淺拷貝
_name = new char[strlen(src._name) + 1];
strcpy_s(_name, strlen(src._name) + 1, src._name);
_sex = src._sex;
_age = src._age;
return *this;
}
5.解構函式
在物件生命週期終止的時候,自動呼叫的成員方法
如果不自己定義解構函式,編譯器就會自己生成解構函式
程式碼示例如下:
~Person()
{
cout << "~Person()" << endl;
delete []_name;
_name = NULL;
}
備註:class的訪問屬性預設為private
struct的訪問屬性為預設public