构造函数与缺省构造函数

在C++中,结构体与类是相似的,他们可以互相进行继承操作

比如我们构造一个类A和一个继承A的结构体B

class A {
public:
	int a;
};

struct B:A
{

};

他们之间可以是相互的继承关系,因此执行以下操作是被允许的

B b;
	b.a = 0;
	cout << b.a << endl;  //编译能通过,B是struct,B的基类是A是通过public继承,所以能通过

结构体中可以缺省初始化对象,方法如下:

对象的初始化:
struct point{
    int x;
    int y;
};
int main()
{
    point p[3]{{1,2},{3,4},{5,6}};
    return 0;
}

同时,在一个struct里面,Universal Construction会按照成员变量的定义顺序挨个初始化struct每一个成员,但是,当有构造函数的时候,就会转去调用构造函数

struct point:
{
Int x;
Int y;

Point(int v)
{
}

}

此时上面main()中的初始化方法就失效了,必须按照指定的初始化法进行初始化操作(这里是传入一个参数)

如果我们有多种构造方法该怎么办呢?这时候就可以进行构造函数的重载操作

struct point
{
	int x;
	int y;

	point() :x( 0 ), y( 0 ) {};
	point(int v) :x(v), y(v) {};
	point(int theX, int theY) :x(theX), y(theY) {};
};

这时我们就可以传入不同的参数进行不同的构造:

(1)不使用构造函数,则会自动把两个参数初始化为0

(2)传入一个参数的构造函数,则会把两个参数初始化为传入的参数

(3)传入两个参数,则分别进行赋值

其中,C++中有一种default构造法,叫做缺省构造函数:

struct DefaultPoint
{
	int x{};
	int y{};
	int z{};

	DefaultPoint() = default;
};

这样调用,如果不调用构造函数,则全部初始化为0,然后根据参数定义的顺序进行赋值,方法如下:

DefaultPoint AAA{1,2};
	cout << AAA.z << endl;

这样使用,x就为1,y就为2,z默认就为0

如果不进行构造,则x,y,z都会为默认为0

这里可能会有一些混淆,为什么有的时候不写缺省构造函数就是有一个缺省构造函数,有些时候就不是呢?因为编译器只会在这个类没有任何构造函数被写出来的情况下会替我们生成一个缺省构造函数,除非我们使用default。具体到我们的例子里,因为point已经有point(int v)和point(int theX, int they)两个构造函数了,因此如果我们不写缺省构造函数,那么编译器会认为这个类没有缺省构造函数

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值