c++构造函数和拷贝构造函数

来源:互联网 发布:java qq邮箱 编辑:程序博客网 时间:2024/05/28 04:54

c++中为什么要使用构造函数?

c++是从c演变过来的,c中存在的是结构体,例如:对点Point

struct Point

{

      double x;

      double y;

};

但是对点的操作还要在外部使用函数来实现。

c++中包括了成员属性和成员方法,但是由于类的封装性,不能像普通变量一个对成员属性就行初始化,所以使用构造函数。

class Point

{

public:

     Point(double xx, double yy)

     {

            double x = xx;

            double y = yy;

     }

     double GetX( )

     {

            return x;

     }

     double GetY( )

     {

             return y;

     }

private:

     double x;

     double y;

};

构造函数注意事项:

1.构造函数可以重载;

2.构造函数没用返回值;

3.构造函数在创建对象时被调用;

4.当不写构造函数时,系统会调用默认的构造函数。

 

拷贝(复制)构造函数是一种特殊的构造函数,其形参为本类的对象引用。

class 类名

{

public:

      类名(形参);   //构造函数

      类名(类名 &对象名);   //拷贝构造函数

};

class Point

{

public:

     Point(double xx, double yy)   //构造函数

     {

            double x = xx;

            double y = yy;

     }

     Point(Point & p);    //拷贝构造函数

     double GetX( )

     {

            return x;

     }

     double GetY( )

     {

             return y;

     }

private:

     double x;

     double y;

};

Point::Point(Point & p)

{

     x = p.x;

     y = p.y;

     cout   << "拷贝构造函数被调用"   << endl;

}

(1)当用类的一个对象去初始化该类的另一个对象时系统自动调用它实现拷贝赋值

void main( )

{

     Point A(1.1, 3.3);

     Point B(A);   //拷贝构造函数被调用

    

     cout << b.GetX( ) << endl;

 

     return;

}

(2)若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用拷贝构造函数

void fun1(Point p)

{

   cout << p.GetX( ) << endl;

}

void main( )

{

    Point A(1, 2);

    fun1(A);    //调用拷贝构造函数

}

(3)当函数的返回值是类对象时,系统自动调用拷贝构造函数

Point fun2( )

{

     Point A(1, 2);

     return A;   //调用拷贝构造函数

}

void main( )

{

      Point B;

      B = fun2( );

}

注意:如果程序员没有为类声明拷贝初始化构造函数,则编译器自己生成一个拷贝构造函数

0 0
原创粉丝点击