类中成员定义顺序在内存中排列

我们知道int一般是4字节,char是1个字节。哪么将这两个类型写到类中定义一个新类型,在内存中又会是占几个字节呢?有人可能会认为就是简单算术加,其时并非这样。写段类定义代码来测试验证类中成员在内存中如何排列。
如果大家有细心看上面的代码,会发现,还有一个问题?就是类中定义了一个set()成员函数,但用sizeof关键字计算字节长度并没明将set()函数占的计算在内?这里要讲的是成员函数实际上并不属于对象,它只是一种“特殊的全局函数”。编译器具体怎么编译实现成员函数,C++标准中没有规定这点。但以后要记住一点的是“类对象占内存大小是指成员变量,不含成员函数”,就可以了。

类class与结构struct关系

C++中类class与结构struct其时是一样的,唯一不同点是类class的成员默认访问控制是私有的private,结构struct的成员默认访问控制是公有的public。
为什么一个语言里会有两个关键字做同样的事?这个就是说到C++的历史了。C++是从C发展过来的,完全兼容C的特性,所以也支持结构struct,但C++又是面向对象的,所以struct也具有了面向对象功能。但一般的人们在使用时还是会用class关键字来代表类,让struct结构来描述一些没有行为的,比如点、圆等等。

this指针

this是一个指针,指向当前类对象本身。记住this本质是指针,指针的些操作也都支持,但与普通指针也有区别,在类里使用。具本写段this指针代码。
this指针用途:1.在类中当指针使用。例:像上面哪个代码中用this查看对象地址。2.将数据成员和函数成员参数分开。具体看这篇:this指针用途3.用this记录地址,用于设计数据结构等。

类成员函数

类成员函数就是类中定义的函数。这样的函数都是成员函数,用以完成特定操作。类设计时成员函数的访问类型一般设为public公有的,这样就可以将成员变量都封装起来,更加安全。一般设计图:

注意一点定义成inline内联成员函数时,此函数体一定是比较小的,比如SetID(),GetID()两个成员函数,函数体只有一句语句。如果成员函数体比较大时,不要写成inline内联成员函数,这样是滥用影响性能。
成员函数重载方法可以参考函数重载,其实是一样的。只是它是类里面的函数,所以叫成员函数,也是函数所以跟函数重载一样。

类成员访问控制符public/private/protected

访问控制符用于指定类中成员的可访问性。类中有3种访问控制符public/private/protected,3种访问控制符具体意义:

类成员访问控制符public/private/protected,具体如何使用,经验是一般对外的成员函数设计成public公有的,类如果要用于继承就将成员变量设计成protected保护的,类中如果确定不能直接被外部访问的变量就设计成private私有的。以上方法可供参考,具体如何设计访问控制符没有统一的标准,要根据实际情况来考虑。

对象object定义

定义好类后,使用类时就要,定义对象(object)。定义对象实际就是要申请内存(当然这个是编译器要处理的事),程序员只要定义对象。可以定义3类基本的对象,普通对象、引用对象、指针对象。

根据实际需求来确定定义哪一类对象。实际定义对象经验如下:一般定义普通变量,如果自已要控制对象生命周期就定义指针对象,如果是在编写代码时希望用另一个名字控制已有对象,可以定义一个引用对象。

类class定义

类class也是一种自定义类型,跟struct结构一样。但一般认为类是面向对象程序设计的部份,类中可以将抽象后的事物定义成属性或方法,还有非常好的封装性、重用性。
这个类定义看起来非常像struct结构的定义,Cpeople类的所有成员都定义成公有的public,后面将会一篇篇讲类的部份,将一点会加进去一点内容,最终将成员定义成私有的private。

多态性

当处理类型层次结构时,程序员常常希望不把对象看作是某一特殊类型的成员,而把它看作基本类型成员,这样就可以编写不依赖于特殊类型的代码。在形体例子中,函数可以对一般形体进行操作,而不关心它们是圆、正方形还是三角形。所有的形体都能被绘制、擦除和移动,所以这些函数能简单地发送消息给一个形体对象,而不考虑这个对象如何处理这个消息。