(一) 防卫式声明、头文件布局、inline、访问级别、构造函数

头文件中的防卫式声明

//complex类的声明,头文件
#ifndef __COMPLEX__
#define __COMPLEX__
...
#endf

头文件布局

#ifndef __COMPLEX__
#define __COMPLEX__
//前置声明forward declarations
#include <cmath>

class ostream;
class complex;

complex&
__doapl (complex* ths, const complex& r);
//类——声明class declarations
class complex
{
...
};
//类——定义class definition
complex::function...//包含成员函数和非成员函数(全域函数)

#endif

内联函数inline

  • inline函数运行速度快
  • 所有在类中实现的函数均是inline函数,但是最终是否成为inline函数是看编译器的实现。编译器会将较简单的函数实现为inline。
  • 在类中实现函数,或在类外实现函数且加inline修饰词,表示希望该函数为inline函数

访问级别

  • private、public
  • 所有的数据均为private
  • 需要提供给外界使用的函数为public
  • 为了实现很好的封装,数据要通过类的public函数被访问或修改
  • 如果有些函数并没有打算被外界调用,仅仅是在内部做一些处理,可以设置为private

构造函数

  • 设置访问级别
    • 构造函数被外界调用,创建一个对象,一般放在public中。
    • 不允许外界创建对象时放在private中。如设计模式中的单例模式,将构造函数放在private中,外界使用它只能调用共有接口,整个全局只有一份,不允许外界再创建对象。
//单例模式
class A{
public:
	static A& getInstance();
	setup() {...}
private:
	A();
	A(const A& rhs);
	...
};

A& A:: getInstance()
{
	static A a;//之所以不将a设置为类的私有静态成员是为了节省空间
	//如果被使用了,作为函数内的静态成员,即是该函数结束a也依然会存在,如果没有被使用则不存在
	//如果作为类的静态数据成员,则它在类中已经存在了
	return a;
}	

//外界调用时,不能通过创建的方式,要通过公有接口访问
A::getInstance().setup();

  • 构造函数先执行列表初始化,再执行大括号中的赋值语句。如果不使用列表初始化,直接使用大括号中的语句,表示你放弃了初始化,直接使用了赋值。
  • 不带指针的类多半不需要写析构函数
  • 重载
    • 如果一个函数是想要读取一个值,另一个是想要修改该值,二者可以重载(同名函数)。读取函数传入参数为空,修改函数传入参数为所要设置的值。
    • 编译器会将同名的重载函数编译,编译后的函数头包含函数的名称,函数的参数有几个,参数的类型等信息
class complex
{
public:
	complex(double r = 0, double i = 0):re(r), im(i){}
	complex() : re(0), im(0){}
	//不能通过编译,会有二义性
	//当构建一个无参的complex对象时,第一个构造函数有缺省值,故二者均为候选函数,编译器无法确定到第调用哪个
	complex& operator += (const complex&);
	double real() const{return re;}
	double image() const{return im;}
private:
	double re, im;
	friend complex& __doapl(complex*, const complex&);
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值