C++学习 3 | 构造函数 | 初值列 | 构造放在private中 | 单例模式


构造函数

创建对象时,自动调用的函数。函数名称与类名相同,没有返回值。

class complex
{
public:
	complex(double r=0, double i=0)		//参数可以有默认值(默认值不是构造函数特有)
		: re(r), im(i) 		//构造函数特有的初值列
	{}	
	double real() const {return re;}	//函数定义
	double imag() const {return im;}	//函数定义
private:
	double re, im;
}

一个变量数值的设定有两个阶段:初始化 → 赋值。

  1. 初始化阶段:
    初值列【re( r), im(i) 】的时侯就初始化值了
  2. 赋值阶段:
    在大括号中进行

如果在初值列中放弃了赋初值的操作,而在第二个阶段(大括号中)再赋初值,则效率会差一点。

换而言之,初值列和下面的写法效果相同,但内部过程不一样。

complex(double r=0,  double i=0)
{
	re = r;
	im = i;
}

创建对象的3种方式:

{
	complex c1(2, 1);
	complex c2;		//如果没有指明参数,则使用默认的
	complex* p= new complex(2, 1);		//动态地创建对象,返回一个指针
}

构造函数重载

构造函数可以有很多个,即对象创建时有很多种初值的设定。但如下这种冲突的写法不行:

{
	complex(double r=0, double i=0): re(r), im(i) {}	
	complex(): re(0), im(0) {}
}

构造函数放在private中

单例模式(Singleton)
函数放在 private 中,则外界不能调用该函数。若构造函数放在 private 中,则外界在创建该对象的时候无法调用该构造函数(即,无法在外界创建该对象)。

那为什么要这样设计呢?

static 静态成员数据和 static 静态成员函数每个对象共同拥有一份。所以就算多次调用该函数,还是只能有一个该类对象。由于 getInstance() 中创建了一个静态成员 a,所以外界需要使用时类 A 时,调用通过A::getInstance() 取得类 A 中创建的对象 a 。若要调用 setup() 方法,则使用 A::getInstance().setup()。

class A
{
public:
	static A& getInstance();
	setup(){...}
private:
	A();
	A(const A& rhs);
	...
}

A& A::getInstance()
{
	static A a;
	return a;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值