c++之说_9_5|自定义类型 struct 构造函数

本文详细解释了构造函数在C++中用于初始化对象的重要性和使用规则,包括无参和有参构造函数,以及构造函数内return的影响。同时介绍了不完全对象的概念和避免方法——二阶构造。还提到静态成员函数的访问方式。

struct 很重要的东西之一

构造函数

struct A

{

public:

A(){};//无参构造函数  你不写 任何构造函数时 也是编译器默认会添加一个无参构造

A(int a){};//有参构造函数  

}

构造函数:

在实例一个对象时  都会使用(必须)一个构造函数 进行该对象的初始化工作

int main()

{

A a;//实例一个A类型名为 a 的对象变量  使用的是 无参构造函数

A a1(100);//实例一个A类型名为 a1 的对象变量  使用的是 有参构造函数 A(int a)

A* pa = new A();// 或者 new A  在堆空间 实例一个A类型对象变量并返回地址  使用的是 无参构造函数

A* pa1 = new A(100);//  在堆空间 实例一个A类型对象变量并返回地址  使用的是

有参构造函数  A(int a)

}

构造函数  也就是  定义变量时  调用的函数 通常我们在里面做 该类型变量的初始化工作

所以也就是说  你要定义这个类型的变量 必须有一个构造函数且是public 的  不然没有办法 去定义

struct A1

{

protected://注意!!!

A1(){};//无参构造函数  你不写 任何构造函数时 也是编译器默认会添加一个无参构造

A1(int a){};//有参构造函数  

public:

A1(const char* a){};

}

int main()

{

A1 a;//error 无法为该类型实例变量  因为 无参构造函数是 protected  外部无权访问

A1 a1(100);//error 无法为该类型实例变量  因为 有参构造函数是 protected  外部无权访问

A1* pa = new A1();// 或者 new A1  在堆空间  error 无法为该类型实例变量  因为 无参构造函数是 protected  外部无权访问

A1* pa1 = new A1(100);//  在堆空间 error 无法为该类型实例变量  因为 有参构造函数是 protected  外部无权访问

A1 a2(“OK”);//ok  定义栈空间变量

使用有参构造函数  A1(const char* a)

A1* pa2 = new A1(“OK”);//ok

在堆空间 实例一个A1类型对象变量并返回地址  使用的是 

有参构造函数  A1(const char* a)

}

现在有个问题  既然我们通常在构造函数内进行初始化工作  那么  我在构造函数里面 主动使用 return; 那么 是否创建了这个对象呢?还是说对象创建失败了?

struct A2

{

private:

int  a;

int  a2;

public:

A2(int b,int&c)

{

   a = b;

   return;

   a2 = c;

}

}

//main 函数中

A2 b(100,99);//b是否被创建了?

答案是  当然被创建了

只是 b 中的 a = 100  a2 = 0

初始化工作没完全完成而已  

这种对象  我们称为  不完全对象 

至于如何 避免这种情况  构造完全对象

那就得使用  二阶构造的概念

提示一下大家  

静态成员函数  变量 可以通过 

类型 :: 变量或函数   访问到

无需通过一个实例对象  (前提是  访问修饰符是public  否则外部无权访问)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值