构造函数 [三]

构造函数
  • 定义;

1 ;特殊的成元函数-- 控制对象·初始化
构造函数的名称与类名相同,并且不返回任何类型,也不会返回 void
2;可以有多个构造函数(函数重载)== 参数列表必须不同

类的构造函数初始化列表
  • 形式;构造函数初始化列表以一个冒号开始,接着是以逗号分隔的数据成员列表,每个数据成员后面跟一个放在括号中的初始化式。
  • 示例代码

class A{
	public:
		int a;
	    double b;
	A() : a(1),b(1.0) {}
		A(){
			a=2;
			b=2.0;
		} 
};

数据成员按类型分类并分情况说明:
  • 1.内置数据类型,复合类型(指针,引用)
    在成员初始化列表和构造函数体内进行,在性能和结果上都是一样的
  • 2.用户定义类型(类类型)
    结果上相同,但是性能上存在很大的差别。因为类类型的数据成员对象在进入函数体前已经构造完成,也就是说在成员初始化列表处进行构造对象的工作,调用构造函数,在进入函数体之后,进行的是对已经构造好的类对象的赋值,又调用个拷贝赋值操作符才能完成(如果并未提供,则使用编译器提供的默认按成员赋值行为)

初始化列表的成员初始化顺序

  • C++初始化类成员时,是按照声明的顺序初始化的,而不是按照出现在初始化列表中的顺序

class B{
	B(int a,int b);
	int _a;
	int _b;
}; 

B::B(int x,int y):_a(x),_b(y)
{
	
}

类 -> 对象控制

  • 拷贝
    拷贝构造函数

1: 拷贝构造函数

定义 第一个参数是自身的引用类型(必须是引用类型),且任何额外参数都有默认值

合成拷贝构造函数

编译器合成 (默认一定会生成)

初始化方式

直接初始化 ;编译器选择普通函数与所给参数最匹配的构造函数
拷贝初始化; 编译器将右侧对象拷贝到正在创建的对象中

\* 拷贝初始化在下列情况下依然发生
> 将对象作为一个实参传递给一个非引用类型的对象
>从 一个返回类型为非引用类型的函数返回一个对象  return !&; 
> 用花括号初始化一个数组元素或一个聚合类成员
示例

class Foo{
	public:
	      Foo();
	Foo(const Foo &){};  //必须是引用类型 
	// … 
}; 

2.: 拷贝赋值函数

实例
int main()
{
      String s1();
      String s2("hello");
      String s3(s1);    //拷贝赋值
      cout<<s3<<endl;
      s3=s2;      // 拷贝构造

      cout<<s3<<endl;
}      
  • 拷贝构造和拷贝赋值是一种忠实的拷贝,内存一个字节一个字节的拷贝
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值