-
構(gòu)造函數(shù)
特殊的成員函數(shù),給對象的初始化吩愧,不需要用戶調(diào)用芋酌,建立對象時,自動執(zhí)行
它的函數(shù)名字與類相同雁佳,可以重載脐帝,沒有返回值和函數(shù)類型。
如果不寫構(gòu)造函數(shù)糖权,類會給出一個無參數(shù)的構(gòu)造函數(shù)堵腹。復(fù)制構(gòu)造函數(shù)
a.程序新建立一個對象時,用另一個對象對它初始化星澳。
b. 函數(shù)的參數(shù)為對象疚顷。
c. 函數(shù)的返回值為對象。
-
特殊的數(shù)據(jù)成員
常數(shù)據(jù)成員禁偎,const聲明腿堤,其值不能改變。 const string sex;
靜態(tài)數(shù)據(jù)成員,static聲明如暖,屬于類笆檀,只能在類外初始化。 static double height;
引用數(shù)據(jù)成員,&聲明盒至,是本人的別名酗洒。 char &c;
-
特殊的函數(shù)
常成員函數(shù)浸船,只能引用本類的數(shù)據(jù)成員,不能修改它們寝蹈。 void prconst()const
靜態(tài)成員函數(shù)李命,屬于類,在類外調(diào)用可以用類名加域運算符號箫老,也可以對象名調(diào)用函數(shù)封字。 Person::prHeight();
-
內(nèi)存的動態(tài)分配和撤銷。
c語言用malloc,free函數(shù)耍鬓,c++用new阔籽,delete。 //懷念java了牲蜀。
Person *p3 = new Person("王五",88); 開辟了存放對象的空間笆制,并初始化值。
delete p3; //回收開辟的內(nèi)存涣达。
相關(guān)的代碼
#include <iostream>
#include<string>
using namespace std;
class Person {
protected:
string name;
int age;
const string sex; //const形數(shù)據(jù)成員,引用形數(shù)據(jù)成員在辆,只能通過初始化列表初始化。
static double height;
public:
Person() {
}
Person(string na) :name(na) //初始化列表,要和成員函數(shù)對應(yīng)
{
}
Person(string na,int ag,string se) :name(na),age(ag),sex(se) //初始化列表,要和成員函數(shù)對應(yīng),不然會出錯
{
}
/*
this指針指向本對象
*/
Person(string name, int age) { //采用this指針
this->name = name; //java里面是 this.name=name; 搞混了度苔。
this->age = age;
}
void prconst()const {
cout << "const成員函數(shù)"<<endl;
}
//靜態(tài)成員函數(shù)匆篓,只能調(diào)用靜態(tài)成員,它屬于類寇窑,可以用類名調(diào)用鸦概,加域作用符號,但是非靜態(tài)成員函數(shù)也可以調(diào)用它
static void prHeight() {
cout << height << endl;
}
void toString();
/*
析構(gòu)函數(shù)甩骏,對象生命周期結(jié)束窗市,會自動執(zhí)行析構(gòu)函數(shù)
先構(gòu)造的后析構(gòu),后構(gòu)造的先析構(gòu)饮笛。
*/
~Person() {
cout << "析構(gòu)函數(shù)" << endl;
print2();
}
/*
復(fù)制構(gòu)造函數(shù)與類同名咨察,采用引用,即別名缎浇。
*/
Person(const Person&p)
{ //復(fù)制構(gòu)造函數(shù)
cout << "復(fù)制構(gòu)造函數(shù) ";
name = p.name;
age = p.age;
}
/*
內(nèi)置函數(shù)扎拣,減小時間開銷
c++類置函數(shù)要關(guān)鍵字inline聲明,但是類中定義的成員函數(shù)可以省略inline素跺,
因為這些成員函數(shù)已經(jīng)被隱含的指定為內(nèi)置函數(shù)二蓝。如果類外定義,需要加上inline關(guān)鍵字指厌。
內(nèi)置成員函數(shù)刊愚,是不包括循環(huán)等控制結(jié)構(gòu)的函數(shù)。
*/
inline void print1() {
cout << "name=" << name << endl;
}
void print2(){
cout << "name=" << name << " " << "age=" << age << " " << "sex=" << sex <<endl;
}
};
/*
類外定義函數(shù)時踩验,必須在函數(shù)名前面加上類名鸥诽。因為在類外定義不知道函數(shù)屬于哪個類商玫。
class_name :: function()
*/
void Person::toString() {
cout << "[" << "name=" << name << " " << "age=" << age << "]" << endl;
}
double Person::height = 1.72; //靜態(tài)成員初始化
int main()
{
cout<<"類的大小:" << sizeof(Person) << endl;
Person p("王小二");
p.print1();
Person::prHeight(); //類調(diào)用
Person peo("張三", 66); //java是 Person peo=new Person("張三", 66);
peo.toString();
Person pe = peo; //等價于Person pe(peo);
pe.toString();
Person p1("李四", 22, "男");
p1.print2();
/*用復(fù)制構(gòu)造函數(shù),給const對象賦值牡借。
const對象不能修改拳昌,只能調(diào)用const函數(shù)。
*/
const Person p2;
p2.prconst();
Person *p3 = new Person("王五",88); //new動態(tài)申請一塊內(nèi)存
p3->toString();
delete p3; //動態(tài)釋放內(nèi)存钠龙,防止內(nèi)存泄漏 炬藤,有些懷念java,GC機制。
system("pause");
return 0;
}
結(jié)果
決定開始寫博客了碴里,設(shè)計到j(luò)ava沈矿,c++等。