一类的继承
假设有一个动物类,他们都有呼吸,睡觉,吃饭
继承起来就是这样子的:
class animal
{
public:
animal()
{
cout<<”animal construct”<<endl;
}
~animal()
{
cout<<”animal destruct”<<endl;
}
void eat()
{
cout<<”animal eat”<<endl;
}
void sleep()
{
cout<<”animal sleep”<<endl;
}
void breathe()
{
cout<<”animal breathe”<<endl;
}
};
下面定义一条鱼:
class animal :public animal
{
fish()
{
cout<<”fish construct”<<endl;
}
~fish(){
cout<<”fish destruct”<<endl;
}
};
这样鱼就继承了animal的eat、breath、sleep方法,并且可以通过main函数查看父类和子类的创建和析构顺序。
类中只读变量的初始化
class point
{
public:
point(): x(0), y(0)
private:
const int x;
const int y;
};
子类初始化父类的带参构造函数
class animal
{
public:
animal(int height, ine weight)
{
cout<<”animal construct”<<endl;
}
~animal()
{
cout<<”animal destruct”<<endl;
}
void eat()
{
cout<<”animal eat”<<endl;
}
void sleep()
{
cout<<”animal sleep”<<endl;
}
void breathe()
{
cout<<”animal breathe”<<endl;
}
};
下面定义一条鱼:
class animal :public animal
{
fish():animal(400, 300)
{
cout<<”fish construct”<<endl;
}
~fish(){
cout<<”fish destruct”<<endl;
}
};
类的继承与类的成员的访问特性
public定义的成员可以在任何地方被访问
protected定义的成员只能在该类和其子类中访问
private定义的成员只能在该类自身中访问
类的继承时一般定义为public继承,比如上面的鱼继承动物。而类默认为private继承,就是父类的成员在子类中都变成了private类型的访问权限。如果以protected的方式则基类中的public和protected成员在派生类中都变成了protected类型的访问权限。
多重继承问题
一个类可以从多个基类中派生。在派生类由多个基类派生的多重继承模式中,基类是用基类表语法成分来说明的,多呈继承的语法与单一继承很类似,只需要在声明继承的多个类之间加上逗号来分隔,定义形式为:
class B: public C, public D
{
……
};
基类的说明顺序只对要调用构造函数和析构函数时有影响:
构造函数:如果代码依赖于B的D部分要在C部分之前初始化,则说明顺序很重要,可以在继承表中吧D类放在C类的前面。初始化是按照基类表中的说明顺序进行初始化的。
激活析构函数进行清除的顺序:析构函数的调用按基类表说明顺序相反的方向进行调用的。
虚函数与多态性
C++的多态性用一句话来概括就是:在基类的函数前加上virtual关键字,在派生类重写该函数,运行时将会根据对象的实际类型来调用相应的函数。如果对象是派生类,就调用派生类的函数,如果对象是基类就调用基类的函数。
其中,对象的实际类型指的是定义的类型。在C++中可以定义一个指向派生类的指针而把这个指针指向基类,这句话的含义就是该指针的实际类型还是派生类。
纯虚函数
virtual void breathe() = 0;
有纯虚函数的类不能实例化对象。
函数的覆盖与隐藏
函数的覆盖是发生在基类和派生类之间的,并且函数完全相同,基类的函数为虚函数(所以派生类的函数也是虚函数?)这是覆盖,其它的都属于隐藏。
C++的多态性是通过虚函数来实现的,所以函数的覆盖总是和多态关联在一起。这里就会回顾上面的虚函数与多态性的“根据对象的实际类型确定调用的函数”。
引用
在调用函数传参时经常使用指针传递:一是避免在实参占较大内存时发生值的复制,二是完成特殊作用,比如修改内存内容。
引用一般用于函数形参上,也可以达到指针的目的,有时效果比指针好(可读性上)。
头文件包含问题的解决
使用#define宏定义
<>和””的区别
<>表示编译器搜索头文件的时候先从系统目录下开始搜索,然后再搜索PATH环境变量所列出的目录,不搜索当前目录。””表示从当前目录à系统目录àPSTH环境变量所列出的目录