chapter 12:类

  1. 类的定义和声明

(1)注意编程角色的不同类别:设计类的接口时,设计者应该考虑的是如何方便类的使用;使用类的时候,设计者就不应该考虑类如何工作。

(2)构造函数和析构函数都可以是私有的,但是这样的话便无法在类之外的地方显示的调用new和delete,因为new和delete会调用构造函数和析构函数。

(3)使用类型别名来简化类:定义自己的局部类型名字。如:

class Test
{
public:
     //
    typedef std::string::size_type index;
	index Get();
};
inline Test::index Test::Get()
{
	;
}

(4)显示指定inline成员函数:在类内部定义的成员函数(声明和实现在一起),将自动作为inline处理。也就是说,当它们被调用时,编译器将试图在同一行内扩展该函数。也可以显示的将成员函数声明为inline,此时声明和实现是否在一起没有要求:

class CCsene

{

 ....

 public:

//默认内联

void SetA(){;}

//显式内联

inline void SetB();

void SetC(){...}

};

//必须放在头文件里,否则编译错误

//inline定义必须都放在头文件里

void CCsene::SetB()

{

;

}

inline void CCsene::SetC()

{

;

}

(5)尽可能使用前向声明

//C.h

class A;

class C

{

;

}

//C.cpp

#include "C.h"

#include "A.h"

(6)为什么类的定义以分好结束?

因为在类定义之后可以接一个对象定义列表:

class CTest{...};

class CTest{...} a,b;

(7)关于this指针:注意this指针来控制const效果

this指针由编译器隐含的定义,它作为成员函数的隐含形参使用。

在普通的非const成员函数中,this的类型是一个指向类类型的const指针(指针值为const,但是指针指向的内容不一定是const);

在const成员函数中,this的类型是一个指向const类类型对象的const指针。既不能改变this所指向的对象,也不能改变this指针值。

class A
{
 public:
	//const成员函数
	void SetA() const;
}

(8)const重载 p378

基于成员函数是否为const,可以重载一个成员函数

class Test
{
 public:
	Test& Get()
	{
		return *this;
	}
	const Test& Get() const
	{
		return *this;
	}	
}
(9)可变数据成员

有时,我们希望类的数据成员(甚至在const成员函数内)可以修改,这可以通过将它们声明为mutable来实现。

mutable int noconst;

(10)static类成员

来源:有时需要一个全局对象,但全局对象破坏封装,这时可以定义一个类的静态数据成员,而不是定义一个可以普遍访问的全局对象。

特性:static数据成员独立于类的任意对象而存在;每个static数据成员是与类关联的对象,并不与该类的对象相关联。

静态成员函数:(a)没有this形参,它可以直接访问所属类的static成员。但不能直接使用非static成员,因为不属于某个对象。(b)同时因为如此,它不能是const函数。(c)static关键字出现在类定义内部,类外部实现无需重复指定static关键字。但是const必须都得出现,因为const可以重载。(d)不能声明为虚函数。







 











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值