1.类的定义
在C++中用类来描述对象,使用关键词class来定义类。
class Date//类名
{
public:
//公有的
private:
//私有的
protected:
//保护的
};
2.访问限定符
访问限定符有public(共有的)、private(私有的)、protected(保护的),在类定义中没有指定访问限定符,默认为private。
public(共有的)成员变量或成员函数可以在类外面进行访问,private和protected都不可以在类外进行访问
3.面向对象三大特性:封装、继承、多态
封装:“高内聚,低耦合”,可以对一个对象进行封装处理,把它的一部分属性和功能对外界屏蔽,也就是说从外界是看不到的、甚至不可知的。
封装性指两方面含义:
(1)将有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间互相独立,互不干扰;
(2)将对象中某些部分隐蔽其内部细节,只留下少量借口接口,以便与外界联系,接受外界的消息。
继承:体现类级别的复用。利用已有的数据类型,定义新的数据类型,所定义的数据类型不仅拥有新的成员还拥有旧的成员,这就叫做继承,被继承的旧的成员称为基类(父类),继承的新的成员称为派生类(子类)。
多态:通过一个接口,实现多种方法。
4.对象的大小计算
每个对象的大小为类中所有成员变量的大小之和,但需要遵循内存对齐(默认:VS——8字节对齐,gcc——4字节对齐)。
class Time
{
public:
Time(int hour = 0 , int minute = 0, int second = 0)
:_hour(hour)
, _minute(minute)
, _second(second)
{}
private:
int _hour;
int _minute;
int _second;
};
void test()
{
Time t;
cout << sizeof(t)<<endl; //12
}
几个小问题:
(1)为什么计算对象大小时不加成员函数的大小?
因为成员函数存放在代码段,类实例化出多个对象时,其对应的成员变量不同,但是使用的是同一个成员函数,所以在计算对象的大小时只计算成员变量的大小,不加成员函数。
(2)一个空类的大小是多少?
一个字节,占用一个字节表示该类型的对象存在。
(3)一个类中只有成员函数,没有成员变量,该类的大小是多少? 一个字节。
(4)为什么要内存对齐?
内存对齐可以提高效率,以空间换时间。