friend-友元函数和友元类

友元关键字是friend,也就是朋友的意思。是不是友元必须另一个类中声明,函数或类自己说是别人的友元。为什么要友元friend?有时在写代码时,类外要访问私有成员,这种情况下就只能声明成友元,不然无法防问类内私有成员。C++支持两种友元:友元函数、友元类。

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

我们知道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结构来描述一些没有行为的,比如点、圆等等。

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

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

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

类class定义

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