什么是封装?
在面向对象编程来讲,就是把数据和针对该数据的操作,统一到一个class里。实际上还包括以头文件的格式将一些类型定义,函数声明,封装至某个头文件。还有namespace语法等。
构造函数:
什么是构造函数?通俗的讲,在类中,函数名和类名相同的函数称为构造函数。它的作用是在建立一个对象时,作某些初始化的工作(例如对数据赋予初值)。C++允许同名函数,也就允许在一个类中有多个构造函数。如果一个都没有,编译器将为该类产生一个默认的构造函数。构造函数上惟一的语法限制是它不能指定返回类型,甚至void 也不行。不带参数的构造函数:一般形式为 类名 对象名(){函数体}带参数的构造函数:不带参数的构造函数,只能以固定不变的值初始化对象。带参数构造函数的初始化要灵活的多,通过传递给构造函数的参数,可以赋予对象不同的初始值。一般形式为:构造函数名(形参表);创建对象使用时:类名 对象名(实参表);构造函数参数的初始值:构造函数的参数可以有缺省值。当定义对象时,如果不给出参数,就自动把相应的缺省参数值赋给对象。一般形式为:构造函数名(参数=缺省值,参数=缺省值,……);
析构函数:
当一个类的对象离开作用域时,析构函数将被调用(系统自动调用)。析构函数的名字和类名一样,不过要在前面加上 ~ 。对一个类来说,只能允许一个析构函数,析构函数不能有参数,并且也没有返回值。析构函数的作用是完成一个清理工作,如释放从堆中分配的内存。一个类中可以有多个构造函数,但析构函数只能有一个。对象被析构的顺序,与其建立时的顺序相反,即后构造的对象先析构。
派生类:
利用继承机制,新的类可以从已有的类中派生。那些用于派生的类称为这些特别派生出的类的"基类"。
单一继承
在类的层次设计中,可以发现一些普遍的特性,即派生类总是同基类有“kind of”关系。
另一个值得注意点是Book既是派生类(从PrintedDocument中派生),也是基类(PaperbackBook是从Book派生的)。下面的例子是这种类层次的一个轮廓性的说明。
class PrintedDocument
{
//成员表
};
//Book是从PrintedDocument中派生的
class Book:public PrintedDocument
{
//成员表
};
//PaperbackBook是从Book中派生
class PaperbackBook: public Book
{
//成员表
};
PrintedDocument作为Book的直接基类,它同时也是PaperbackBook的非直接 基类。直接基类和非直接基类的区别在于直接基类出现在类说明的基类表中,而非直接基类不出现在基类表中。
在继承中,派生类含有基类的成员加上任何你新增的成员。结果派生类可以引用基类的成员(除非这些成员在派生类中重定义了)。当在派生类中重定义直接基类或间接基类的成员时,可以使用范围分辨符(::)引用这些成员。考虑下面的代码:
class Document
{
public:
char * Name;//文档名称
void PrintNameOf(); //打印名称
};
//实现类Document的PrintNameOf函数
void Document::PrintNameOf()
{
cout << Name << end ;
}
class Book:public Document
{
public:
Book(char *name,long pagecount);
private:
long PageCount;
};
//class Book 构造函数
Book::Book (char *name,long pagecount)
{
Name=mew char [strlen(name)+1];
strcpy (Name,name);
PageCount=pagecount;
};
注意,Book的构造函数(Book::Book)具有对数据成员Name的访问权。