通过继承机制,可以利用已有的数据类型来定义新的数据类型。所定义的新的数据类型不仅拥有新定义的成员,而且还同时拥有旧的成员。我们称已存在的用来派生新类的类为基类,又称为父类。由已存在的类派生出的新类称为派生类,又称为子类。
在C++语言中,一个派生类可以从一个基类派生,也可以从多个基类派生。从一个基类派生的继承称为单继承;从多个基类派生的继承称为多继承。
例:
#include <iostream.h>
class Metal
{
public:
unsigned atomicNumber;
float atomicWeight;
float pricePerounce;
public:
Metal( unsigned Number=0,
float Weight=0.000000,
float Perounce=0.000000)
{
atomicNumber=Number;
atomicWeight=Weight;
pricePerounce=Perounce;
}
~Metal() {}
unsigned GetNumber(void) {return atomicNumber;} //内联函数
float GetWeight(void) {return atomicWeight;}
float Getprice(void) {return pricePerounce;}
virtual void output()
{
cout << "The atomic weight =" << atomicWeight << endl;
cout << "The atomic number =" << atomicNumber << endl;
cout << "Price per ounce =" << pricePerounce << endl;
}
};
class Pb : public Metal //公有继承,单继承
{
public:
Pb (unsigned Number=82,float Weight=207,float Perounce=0.01):Metal(Number,Weight,Perounce) {}
//子类构造首先调用基类构造函数
};
class Au : public Metal
{
public:
Au (unsigned Number=79,float Weight=196.9665,float Perounce=450.75):Metal(Number,Weight,Perounce) {}
Au (Pb& lemp) //拷贝函数
{
atomicNumber=lemp.GetNumber()-3;
atomicWeight=lemp.GetWeight()-10.2335;
pricePerounce=lemp.Getprice()+450.74;
}
};
void main ()
{
Pb m;
Au n=m; //拷贝
n.output();
}
注:
派生类的三种继承方式:公有继承(public)、私有继承(private)、保护继承(protected)是常用的三种继承方式:
公有继承时,水平访问和垂直访问对基类中的公有成员不受限制;
私有继承时,水平访问和垂直访问对基类中的公有成员也不能访问;
保护继承时,对于垂直访问同于公有继承,对于水平访问同于私有继承。
对于基类中的私有成员,只能被基类中的成员函数和友元函数所访问,不能被其他的函数访问。
如果通过公有继承来产生基类,那么这个派生类应该是其基类的特化。
如果派生类之间的区别在于属性,则用数据成员来表示;如果在于行为,则用虚函数来表示。
任何一个类都可以派生出一个新类,派生类也可以再派生出新类。