做网站建设需要什么资质,个人 可以备案做分类信息网站吗,徐州网站seo公司,做网站需要哪些程序员-
// doesnt exist
13.3
赋给派生类引用,将发生什么情况呢?派生类引用能够为基对象调用派生类方法,这样做将出现问题。例 如,将RatedPlayer :: Rating()方法用于TableTennisPlayer对象是没有意义的,因为TableTennisPlayer对象没 有rating成员。 如果基类引用和指针可以指向…-
// doesnt exist
13.3
赋给派生类引用,将发生什么情况呢?派生类引用能够为基对象调用派生类方法,这样做将出现问题。例 如,将RatedPlayer :: Rating()方法用于TableTennisPlayer对象是没有意义的,因为TableTennisPlayer对象没 有rating成员。 如果基类引用和指针可以指向派生类对象,将出现一些很有趣的结果。其中之一是基类引用定义的函 数或指针参数可用于基类对象或派生类对象。例如,在下面的函数中: void Show (const TableTennisPlayer rt)
cout Name: : rt.Name(): cout \nTable: ; if (rt. HasTable () ) Cout yes\n: else cout no\n:
形参rt是·个基类引用,它可以指向基类对象或派生类对象,所以可以在Show()中使用 TableTennis 参数或Ratedplayer 参数: TableTennisPlayer playerl |Tara. Boomdea, false) : RatedPlayer rplayer1 (1140. Mallory. Duck, true) : Show (player1) : // works with TableTennisPlayer argument Show |rplayerl) : // works with RatedPlayer argument 对于形参为指向基类的指针的函数,也存在相似的关系。它可以使用基类对象的地址或派生类对象的 地址作为实参: void Wohs (const TableTennisPlayer * pt); // function with pointer parameter
TableTennisPlayer playerl(Tara, Boomdea, false); RatedPlayer rplayer1 (1140, Mallory, Duck, true) ; Wohs (6playerl); // works with TableTennisPlayer * argument Wohs (rplayer1); // works with RatedPlayer * argument 引用兼容性属性也能够将基类对象初始化为派生类对象,尽管不那么直接。假设有这样的代码: RatedPlayer olafl (1840. Olaf, Loaf, true) ; TableTennisPlayer olaf2 lolafl) ; 要初始化olaf2,匹配的构造函数的原型如下: TableTennisPlayer (const RatedPlayer ) : 类定义中没有这样的构造函数,但存在隐式复制构造函数: // implicit copy constructor TableTennisPlayer (const TableTennisPlayer ) : 形参是基类引用,因此它可以引用派生类。这样,将olaf2初始化为olafl时,将要使用该构造函数, 它复制firstname、lastname 和hasTable 成员。换句话来说,它将olaf2初始化为嵌套在RatedPlayer对象olaf1 中的TableTennisPlayer 对象。 同样,也可以将派生对象赋给基类对象: RatedPlayer olafl (1840. Olaf, Loaf, true) : TableTennisPlayer winner: winner olafl: // assign derived to base object 在这种情况下,程序将使用隐式重载赋值操作符: TableTennisPlayer operator (const TableTennisPlayer ) const: 基类引用指向的也是派生类对象,因此olafl的基类部分被复制给winner。
继承-is-a关系
派生类和基类之间的特殊关系是基于C继承的底层模型的。实际上,C有3种继承方式:公有继