• HQS-C++构造函数


    C++构造函数

    1.含义:在构造对象时自动调用此函数,往往用来初始化对象内的成员变量;

    2.规则:函数名与类名一致且没有返回值;

    class Circle
    {
    	public:
    		Circle();
    		int calcArea();
    	private:
    		int x;
    		int y;
    		int r;
    };
    
    Circle::Circle()
    {
    	x=0;
    	y=0;
    	r=0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

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

    Circle::Circle(int _x,int _y,int _r) :x(_x),y(_y),r(_r)
    {
    	cout<<"x="<<x<<" y="<<y<<" r="<<r<<endl;
    }
    
    • 1
    • 2
    • 3
    • 4

    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;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    7.一个对象以值的形式传入函数体

    void Test(Circle c)
    {
    	cout<< "Test"<<endl;
    }
    
    • 1
    • 2
    • 3
    • 4

    8.一个对象以值的形式从函数中返回

    禁止优化

    g++ xxx.cpp -fno-elide-constructors
    
    • 1

    9.浅拷贝与深拷贝

    (1)浅拷贝:默认拷贝构造函数为浅拷贝;浅拷贝对指针类型变量,仅拷贝对应内存地址,不会新开辟内存地址空间;

    (2)深拷贝:人为重载拷贝构造函数,新开辟一段内存空间;

    10.explicit

    (1)含义:①explicit关键字只能用来修饰类的构造函数,且最好只修饰只有一个参数的构造函数;②被修饰的构造函数不能发生相应的隐式类型转换,只能以显式的方式进行类型转换;

    (2)隐式拷贝构造函数

    1)一个对象作为函数参数,以值传递的方式传入函数体;
    2)一个对象作为函数返回值,以值传递的方式从函数返回;
    3)以A a = b的方式构造a,其中b也是A类型;
    4)拷贝构造函数一般不会设计成禁止隐式转换;
  • 相关阅读:
    包含光栅的高NA显微系统
    ArcGIS:如何添加字段、属性表的连接、字段的计算?
    杂记(3):在Pytorch中如何操作将数据集分为训练集和测试集?
    迁移学习《Efficient and Robust Pseudo-Labeling for Unsupervised Domain Adaptation》
    接口测试详解
    LSP 链路状态协议
    ROS基本程序实现
    Linux ARM平台开发系列讲解(CAN) 2.14.1 CAN基础协议分析
    1312. 让字符串成为回文串的最少插入次数
    静态变量及静态方法讲解
  • 原文地址:https://blog.csdn.net/jun8086/article/details/127561899