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.针对指针对象,只拷贝指针存储的地址

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...
win11本地账户怎么改名?win11很多操作都变了样,用户如果想要...