(1)函數(shù)名與類名相同。
(2)構(gòu)造函數(shù)無函數(shù)返回類型說明。注意是沒有而不是 void,即什么也不寫,也不可寫void!實(shí)際上構(gòu)造函數(shù)有返回值,返回的就是構(gòu)造函數(shù)所創(chuàng)建的對(duì)象。
(3)在程序運(yùn)行時(shí),當(dāng)新的對(duì)象被建立,該對(duì)象所屬的類的構(gòu)造函數(shù)自動(dòng)被調(diào)用,在該對(duì)象生存期中也只調(diào)用這一次。
(4)構(gòu)造函數(shù)可以重載,但要滿足重載的規(guī)則。
(5)構(gòu)造函數(shù)可以在類中定義,也可以在類外定義。
(6)如果類說明中沒有給出構(gòu)造函數(shù),則C++編譯器自動(dòng)給出一個(gè)缺省的構(gòu)造函數(shù)系統(tǒng):類名為(void){},但只要我們定義了一個(gè)構(gòu)造函數(shù),就不會(huì)自動(dòng)生成缺省的構(gòu)造函數(shù)。
(7)構(gòu)造函數(shù)的參數(shù)可以有缺省值。
構(gòu)造函數(shù)與new運(yùn)算符之間有著緊密的聯(lián)系,我們可以使用new對(duì)象運(yùn)算符來動(dòng)態(tài)地建立這個(gè)對(duì)象。建立時(shí)要自動(dòng)調(diào)用構(gòu)造函數(shù),以便完成初始化對(duì)象的數(shù)據(jù)成員。最后返回這個(gè)動(dòng)態(tài)對(duì)象的起始地址。用new運(yùn)算符產(chǎn)生的動(dòng)態(tài)對(duì)象,在不再使用這種對(duì)象時(shí),必須用delete運(yùn)算符來釋放對(duì)象所占用的存儲(chǔ)空間。
示例:
#pragma once
#include "iostream"
using namespace std;
class A
{public:
float x, y;
public:
A(float a, float b) {x = a; y = b; }//初始化
A() {x = 0; y = 0; }
};
#include#include "A.h"
using namespace std;
int main(void)
{A *pa1, *pa2;
pa1 = new A(3.0, 5.0);//使用new動(dòng)態(tài)開辟對(duì)象空間
pa2 = new A();
cout<< pa1->x<< '\t'<< pa1->y<<'\n';
cout<< pa2->x<< '\t'<< pa2->y;
delete pa1;//用delete釋放空間
delete pa2;
return 0;
}
運(yùn)行結(jié)果:
(1)析構(gòu)函數(shù)名與類名相同、但在前面加上字符~,如~ CTrianle()。
(2)析構(gòu)函數(shù)無函數(shù)返回類型,與構(gòu)造函數(shù)在這方面是一樣的。但析構(gòu)函數(shù)不帶任何參數(shù)
(3)一個(gè)類有一個(gè)也只有一個(gè)析構(gòu)函數(shù),這與構(gòu)造函數(shù)不同。析構(gòu)函數(shù)可以缺省:
(4)對(duì)象注銷時(shí),系統(tǒng)自動(dòng)調(diào)用析構(gòu)函數(shù)。
在定義一個(gè)對(duì)象時(shí),系統(tǒng)會(huì)給出一個(gè)析構(gòu)函數(shù)。但是我們有的時(shí)候,在程序的執(zhí)行過程中,對(duì)象如果用new運(yùn)算符開辟了空間,則在類中應(yīng)該定義一個(gè)析構(gòu)函數(shù),并在析構(gòu)函數(shù)中使用delete刪除由new 分配的內(nèi)存空間。因?yàn)樵诔废麑?duì)象時(shí),系統(tǒng)自動(dòng)收回為對(duì)象所分配的存儲(chǔ)空間,而不能自動(dòng)收回new分配的動(dòng)態(tài)存儲(chǔ)空間。
示例:
#pragma once
#include "string.h"
#include "iostream"
using namespace std;
class Str
{char* sp;size_t length;
public:
Str(const char* string)
{length = 0;
if (string)
{ length = strlen(string);
sp = new char[length + 1];
strcpy_s(sp,length+1,string);
}
else sp = 0;
}
~Str()
{if (sp) delete sp;
}
void show(void)
{cout<< sp<< endl;
}
};
#include#include "Str.h"
using namespace std;
int main(void)
{Str s1("Studey c++");
s1.show();
return 0;
}
運(yùn)行結(jié)果:
(1)以類對(duì)象作為函數(shù)參數(shù)傳值調(diào)用時(shí)
(2)函數(shù)返回值為類對(duì)象時(shí)
(3)用一個(gè)已定義的對(duì)象去初始化一個(gè)新對(duì)象時(shí)
示例:
#pragma once
class sanweizuobiao
{public:
sanweizuobiao();
sanweizuobiao(const sanweizuobiao& m);//拷貝構(gòu)造
~sanweizuobiao(void);
public:
double dx;
double dy;
double dz;
public:
double x() const {return dx; }//返回x坐標(biāo)
double y() const {return dy; }//返回y坐標(biāo)
double z() const {return dz; }//返回z坐標(biāo)
};
#include "sanweizuobiao.h"
sanweizuobiao::sanweizuobiao()
{dx = 0;
dy = 0;
dz = 0;
}
sanweizuobiao::~sanweizuobiao(void)
{}
sanweizuobiao::sanweizuobiao(const sanweizuobiao& m)
{dx = m.dx;
dy = m.dy;
dz = m.dz;
}
#include#include "sanweizuobiao.h"
using namespace std;
int main(void)
{sanweizuobiao m,n;
n.dx = 1.134556;
n.dy = 2.465566;
n.dz = 3.567878;
m = sanweizuobiao(n);//調(diào)用拷貝構(gòu)造
cout<< m.dx<< '\n'<< m.dy<< '\n'<< m.dz;
return 0;
}
運(yùn)行結(jié)果:
運(yùn)算符重載實(shí)際上是一種函數(shù)詞用的形式。用成員函數(shù)重載運(yùn)算符就是將運(yùn)算符重載定義成一個(gè)類成員的函數(shù)的形式。通常將重載運(yùn)算符的成員函數(shù)稱為運(yùn)算符函數(shù)。
示例:
#pragma once
class A
{public:
float x, y;
public:
A(float a = 0, float b = 0)
{x = a; y = b;
}
A operator++()
{A t;
t.x = ++x;
t.y = ++y;
return t;//前置運(yùn)算
}
A operator++(int)
{A t;
t.x = x++;
t.y = y++;
return t;//后置運(yùn)算
}
};
#include#include "A.h"
using namespace std;
int main(void)
{A a(2, 3), b,c;
b = ++a;
c = a++;
cout<< a.x<< '\t'<< a.y<<'\n';
cout<< b.x<< '\t'<< b.y<<'\n';
cout<< c.x<< '\t'<< c.y;//因?yàn)閍前置運(yùn)算一次,后置運(yùn)算一次,所以a的最終的值為4,5.b值是前置運(yùn)算所以為3,4.c值是后置運(yùn)算就是3,4
return 0;
}
運(yùn)行結(jié)果:
1、該函數(shù)不屬于任何對(duì)象,其實(shí)就是一個(gè)全部函數(shù),但是這個(gè)全局函數(shù)僅僅作用于該類的對(duì)象。
2、該函數(shù)可以訪問該類的私有成員變量,公有的更加不用說了。
示例:重載運(yùn)算符+號(hào)
#pragma once
#include "iostream"
using namespace std;
class A
{int i;
public:
A(int a = 0)
{i = a;
}
void show(void) {cout<< "i="<< i<< endl; }
friend A operator+(A&, A&);
};
A operator+(A&a, A&b)
{A t;
t.i = a.i + b.i;
return t;
}
#include#include "A.h"
int main(void)
{A a1(10), a2(20), a3;
a1.show();
a2.show();
a3 = a1+ a2;
a3.show();
return 0;
}
運(yùn)行結(jié)果:
文章參考戴吾蛟老師主編的《測(cè)繪程序設(shè)計(jì)》編寫,代碼有所修改,并加入自己的理解,c++類撰寫入門的小伙伴可參考!
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧