——派生类需要自己的构造函数。
派生类中可以根据需要添加额外的数据成员和成员函数,甚至可以给予继承的原成员函数新的定义。
基类指针或引用可指向派生对象,反过来则只能使用强制类型转换。
派生类对象可使用基类的非私有成员。
可使用派生对象初始化基类对象或赋值。
一般不允许将基类对象赋给派生类对象(上面第三条),特殊情况下可以。
已有派生类对象初始化创建的派生类对象。
已有派生类对象给另一个派生类对象赋值。
派生类对象的析构函数被调用后会自动调用基类的析构函数。
C++11增加了允许继承构造函数的机制,但派生类默认不能继承构造函数和析构函数。
class RatedPlayer : public TableTennisPlayer
{
private:
unsigned int rating; // add a data member
public:
RatedPlayer (unsigned int r = 0, const string &fn = "none", const string &ln = "none", bool ht = false);
RatedPlayer (unsigned int r, const TableTennisPlayer &tp);
unsigned int Rating() const { return rating; } // add a method
void ResetRating (unsigned int r) { rating = r; } // add a method
};
构造函数必须给新成员和继承的成员提供数据。
RatedPlayer::RatedPlayer(unsigned int r, const string &fn, const string &ln, bool ht) : TableTennisPlayer(fn, ln, ht)
{
rating = r;
}
派生类构造函数必须使用基类构造函数,创建派生类对象时,程序首先创建基类对象(初始化继承的数据成员)然后再调用派生类构造函数。C++使用成员初始化列表语法完成该操作。
如没有调用基类构造函数,那么将隐式调用基类的默认构造函数。除非要使用默认构造函数,否则应显示调用正确的基类构造函数。派生类对象过期时,程序将首先调用派生类析构函数,然后再自动调用基类析构函数。
要使用派生类,程序必须要能访问基类声明。
派生类对象可以使用基类的方法,条件是方法不是私有的(即公有和保护)。
基类指针可以在不进行显示类型转换的情况下指向派生类对象;基类引用可以在不进行显示类型转换的情况下引用派生类对象
RatedPlayer rplayer(1140, "Mallory", "Duck", true); TableTennisPlayer &rt = rplayer; TableTennisPlayer *pt =&rplayer; rt.Name(); // invoke Name() with reference pt->Name(); // invoke Name() with pointer
不可以将基类对象和地址赋给派生类引用和指针,除非使用强制转换(友元函数不是成员函数因此不能被继承,但欲使用基类的友元函数时可使用此方法,但要小心用错)。










