标签:signed work string omd ssi c++ nbsp none nis
——派生类需要自己的构造函数。
派生类中可以根据需要添加额外的数据成员和成员函数,甚至可以给予继承的原成员函数新的定义。
基类指针或引用可指向派生对象,反过来则只能使用强制类型转换。
派生类对象可使用基类的非私有成员。
可使用派生对象初始化基类对象或赋值。
派生类对象的析构函数被调用后会自动调用基类的析构函数。
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; }
派生类对象过期时,程序将首先调用派生类析构函数,然后再调用基类析构函数。
要使用派生类,程序必须要能访问基类声明。
派生类对象可以使用基类的方法,条件是方法不是私有的(即公有和保护)。
基类指针可以在不进行显示类型转换的情况下指向派生类对象;基类引用可以在不进行显示类型转换的情况下引用派生类对象
RatedPlayer rplayer(1140, "Mallory", "Duck", true); TableTennisPlayer &rt = rplayer; TableTennisPlayer *pt =&rplayer; rt.Name(); // invoke Name() with reference pt->Name(); // invoke Name() with pointer
不可以将基类对象和地址赋给派生类引用和指针,除非使用强制转换(欲使用基类的友元函数时,但要小心用错)。
基类声明的函数引用参数或指针参数可用于值为基类对象或派生类对象以及它们的地址的情况。
void Show(const TableTennisPlayer &rt) { ... }
TableTennisPlayer player1("Tara", "Boomdea", false); RatedPlayer rplayer1(1140, "Mallory", "Duck", true); Show(player1); // works with TableTennisPlayer argument Show(rplayer1); // works with RatedPlayer argument
省略形参为const TableTennisPlayer *rt的情况,与上相似。
引用兼容性属性:可以将基类对象初始化为派生类对象。
RatedPlayer olaf1(1840, "Olaf", "Loaf", true); TableTennisPlayer olaf2(olaf1);
匹配的构造函数的原型:
TableTennisPlayer(const RatedPlayer &); // doesn‘t exit
类中并没有该构造函数,但存在隐式复制构造函数:
// implicit copy constructor TableTennisPlayer(const TableTennisPlayer &);
即它将olaf2初始化为嵌套在RatedPlayer对象olaf1中的TableTennisPlayer对象(使用派生类中嵌套的基类对象对目标基类对象进行初始化)
同样,也可以将派生对象赋给基类对象:
RatedPlayer olaf1(1840, "Olaf", "Loaf", true); TableTennisPlayer winner; winner = olaf1; // assign derived to base object
在这种情况下,程序使用隐式重载赋值运算符:
TableTennisPlayer &operator=(const TableTennisPlayer &) const;
与上类似,使用派生类中嵌套的基类对象对目标基类对象进行按成员赋值。
---
标签:signed work string omd ssi c++ nbsp none nis
原文地址:https://www.cnblogs.com/suui90/p/13172391.html