栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

  • 构造函数
  • 构造函数重载
  • 构造函数放在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;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/352776.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号