C++构造函数
1.含义:在构造对象时自动调用此函数,往往用来初始化对象内的成员变量;
2.规则:函数名与类名一致且没有返回值;
class Circle
{
public:
Circle();
int calcArea();
private:
int x;
int y;
int r;
};
Circle::Circle()
{
x=0;
y=0;
r=0;
}
3.默认构造函数:当类中没有构造函数时,编译器会自动生成一个构造函数;
4.构造函数的重载
class Circle
{
public:
Circle();//无参构造函数
Circle(int _r);//有参构造函数
Circle(int _x,int _y,int _r);
int calcArea();
private:
int x;
int y;
int r;
};
Circle::Circle()
{
x=0;
y=0;
r=0;
}
Circle::Circle(int _r)
{
x=0;
y=0;
r=_r;
}
Circle::Circle(int _x,int _y,int _r)
{
x=_x;
y=_y;
r=_r;
}
5.初始化列表:在初始化时,也可以使用初始化列表的方式来实现构造函数,一般在继承中;
Circle::Circle(int _x,int _y,int _r) :x(_x),y(_y),r(_r)
{
cout<<"x="<<x<<" y="<<y<<" r="<<r<<endl;
}
6.拷贝构造函数
(1)当一个对象需要通过另一个对象初始化,则需要使用拷贝构造函数;
class Circle
{
public:
Circle();
Circle(int _r);
Circle(int _x,int _y,int _r);
Circle(const Circle &c);//拷贝构造函数
int calcArea();
private:
int x;
int y;
int r;
};
Circle::Circle(const Circle &c)
{
x=c.x;
y=c.y;
r=c.r;
cout<<"x="<<x<<" y="<<y<<" r="<<r<<endl;
}
int main(int argc,const char *argv[])
{
Circle a;
Circle b(a);
Circle c=b;
}
7.一个对象以值的形式传入函数体
void Test(Circle c)
{
cout<< "Test"<<endl;
}
8.一个对象以值的形式从函数中返回
禁止优化
g++ xxx.cpp -fno-elide-constructors