- 在类中定义——成员函数
- 函数信息:
i:函数名:与类名同名
ii:“无”,返回值类型(不是void)
iii:可以无参,可以有参
iv:函数体:完成数据成员的初始化 - 作用:完成对对象的初始化——每创建一个对象,系统自动调用构造函数,完成该对象的初始化
i:构造函数由系统自动调用
ii:创建多少个对象,就要调用多少次构造函数 - 构造函数可以无参———设置数据成员的默认值
public:
Myclass()
{
x=0;
y=0;
}
- 构造函数允许重载(同名函数)
i:参数个数不同
ii:参数类型不同
public:
Myclass()
{
x=0;
y=0;
}
Myclass(int i,int j)
{
x=i;
y=j;
}
构造函数的简化表示:
public:
Myclass():x(0),y(0){}
Myclass(int i,int j):x(i),y(j){}
举个简单的例子:
输出结果为3
#include<iostream>
using namespace std;
class Myclass{
private:
int *px;
public:
Myclass(int *t)
{
px=t;
}
void print()
{
cout<<*px<<endl;
}
};
int main()
{
int x=3;
Myclass my(&x);
my.print();
}
例:声明一个Trangle类
数据成员:a,b,c分别表示边的长度(默认为1,整型)
功能:i:判断a,b,c是否构成一个三角形
ii:若可以,返回三角形面积
#include<iostream>
#include<math.h>
using namespace std;
class Trangle{
private:
int a,b,c;
public:
Trangle()
{
a=b=c=1;
}
Trangle(int x,int y,int z)
{//数据成员接收边长
a=x;
b=y;
c=z;
}
int Judge()
{//判断是否构成一个三角形
if((a+b>c&&a-b<c)&&(a+c>b&&a-c<b)&&(b+c>a&&b-c<a)){
return 1;
}
else{
cout<<"No!"<<endl;
return 0;
}
}
void Area()
{//计算面积
float s;
s=(a+b+c)/2.0;
float S;
S=sqrt(s*(s-a)*(s-b)*(s-c));
cout<<S<<endl;
}
};
int main()
{
int x,y,z,t;
cout<<"Please input x y z: ";
cin>>x>>y>>z;
Trangle Tra(x,y,z);
t=Tra.Judge();
if(t){
cout<<"Yes!"<<endl;
Tra.Area();
}
return 0;
}
若类中没有声明构造函数,系统将会自动生成一个无参,无内容的构造函数
若在类中定义了任何一个构造函数,系统将不再自动生成一个无参无内容的构造函数