構造函數的作用:在對象被創建時利用特定的值構造對象,將對象初始化爲一個特定的狀態。
構造函數的性質:構造函數的函數名與類名相同,沒有返回值
一般存放在公有類型中;
例:
class people
{
public:
people(int page,char pname[]); //聲明構造函數
private:
int age;
char name[];
};
people::people(int page,char pname[]):age(page),name(pname){}//定義構造函數
複製構造函數 寫法:類名(類名 &對象名);
例:
class people
{
public:
people(int page,char pname[]); //聲明構造函數
people(people &p); //聲明覆制構造函數
private:
int age;
string name[];
};
people::people(int page,char pname[]):age(page),name(pname){} //定義構造函數
people::people(people &p) //定義複製構造函數
{
age=p.age;
name[]=p.name[];
}
複製構造函數的調用地點:
1.當用類的一個對象去初始化該類的另一個對象例:
people a(17,Mike);
people b(a);
2.如果函數的形參是類的對象,調用函數時,進行形參和實參結合時
例:
int main()
{
people a(17,MIke);
f(a);
return 0;
}
void f(people j)
{
省略>>>>>>>>>>>>>>>>>
}
3.函數的返回值是類的對象時
類名 函數名(形參)
{
省略》》》》》》》
return 對象名;
}
源文件如下:
#include<iostream>
using namespace std;
class Tree {
public:
int grow(int years);
void age();
Tree(int x)
{
ages = x;
}
Tree(Tree &p);
~Tree() { cout << "析構函數被調用" << endl; }
private:
int ages;
};
Tree::Tree(Tree &p)
{
ages = p.ages;
cout << "複製函數被調用" << endl;
}
int Tree::grow(int years)
{
return ages+ years;
}
void Tree::age()
{
cout << "put tree's year :\n" << grow(2)<<" years"<< endl;
}
int main()
{
Tree Tree1(4);
Tree Tree2 = Tree1;
Tree2.age();
return 0;
}