微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux下c++的构造函数华清远见学员

构造函数的定义

        在构造对象时自动调用函数,往往用来处初始化对象内的成员变量

        函数名与类名一致且没有返回值

                代码示例:

class circle{

public:
    circle();
    double calculateArea();

private:
    int r;
    int x;
    int y;
};

circle::circle()
{
    r = 0;
    x = 0;
    y = 0;
}

double circle::calculateArea()
{
    return 3.14 * r * r;
}

认构造函数:当类中没有构造函数时,编译器会自动生成一个构造函数

构造函数重载:针对不同的初始化方式,可以重载构造函数

        代码示例:

class circle{

public:
    circle();
    circle(int _r);
    circle(int _x,int _y,int _r);
    double calculateArea();

private:
    int r;
    int x;
    int y;
};

circle::circle()
{
    r = 0;
    x = 0;
    y = 0;
}

circle::circle(int _r)
{
    r = _r;
    x = 0;
    y = 0;
}

circle::circle(int _x,int _y,int _r)
{
    r = _r;
    x = _x;
    y = _y;
}

double circle::calculateArea()
{
    return 3.14 * r * r;
}

初始化列表:在初始化时,也可以使用初始化列表的方式来实现构造函数,一般用在继承中

        代码示例:

class circle{

public:
    circle();
    circle(int _r);
    circle(int _x,int _y,int _r);
    double calculateArea();

private:
    int r;
    int x;
    int y;
};

circle::circle(int _x,int _y,int _r):r(_r),x(_x),y(_y)//初始化列表
{
    cout << "x, y = " << x << " , " <<y <<endl;
    cout <<" r = " << r <<endl;
}

拷贝构造函数:当一个对象需要通过另一个对象初始化,则需要使用拷贝构造函数

        在什么时候会调用拷贝构造函数

                1.主动创建对象时,用一个对象去初始化另一个对象的时候

                        ​​​​​​代码示例 :          

class circle{

public:
    circle();
    circle(const circle &c);
    circle(int _r);
    circle(int _r,int _x,int _y);
    double calculateArea();

private:
    int x;
    int y;
    int r;
};

circle::circle(const circle &c)
{
    r = c.r;
    x = c.x;
    y = c.y;
}

int main()
{
    circle a;
    circle b(a);//  此时会调用拷贝构造函数
    circle c = b;//

    return 0;
}

        2.一个对象以值传递的形式传入函数

        3.一个对象以值得形式从函数返回

                        c++标准允许一种(编译器)实现省略创建一个只是为了初始化另一个同类型对象的临时对象。指定参数(-fno-elide-construtors)将关闭这种优化

                 代码示例:

      

#include<iostream>

using namespace std;

class A{

public:
    A();//构造函数
    A(const A &a);//拷贝构造函数

private:
    int x;
};

A::A()
{
    x = 0; //构造函数的实现
}

A::A(const A &a)   //拷贝构造函数的实现
{
    cout << "copy my" <<endl; 
    x = a.x;
} 

A ceshi()    //编写一个函数,返回一个A类对象
{
    A a;
    return a;
}

int main()
{
    ceshi();    //调用函数ceshi()会调用一次拷贝构造函数
    A a = ceshi();       //将ceshi()返回的对象接收回再次调用一次拷贝构造函数
    return 0;
}

4.深拷贝和浅拷贝

        (1).深拷贝:针对指针对象,拷贝指针指向的空间

        (2).浅拷贝:1.认的拷贝构造函数为浅拷贝

                                2.针对指针对象,只拷贝指针存储的地址

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐