jlz

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  0 Posts :: 13 Stories :: 0 Comments :: 0 Trackbacks

常用链接

留言簿

我参与的团队

搜索

  •  

最新评论

   
1. 派生类可以使用基类方法(非private)
2.  基类指针可以不显式类型转换情况下指向派生类对象, 基类引用可以在不进行显示类型转换的情况下引用派生类对象.
   RatedPalyer rplayer(1111,"Mallory","duck",true);
   TableTennisPlayer &rt = rplayer;
   TableTennisPlayer  * pt = &rplayer;
  rt.Name() ; // invoke Name() with reference
 pt->Name(); //invoke Name() with pointer

   只能调用基类方法,不能调用派生类方法.

3. 不可以将基类对象和地址赋给派生类引用和指针
  TableTennisPalyer player("betsy","bloop",true);
  RatedPalyer &rr  = player; // Not allowed
  RatedPalyer *pr  = player; //Not allowed

4 .基类指针指向派生类对象   //此处为关键部分
void Show(const TableTennisPlayer &rt)
{
cout<<"Name:";
rt.Name();
cout<<"\nTable";
if(rt.HasTable())
 cout<<"yes\n";
 else
cout<<"no\n";
}

形参rt为基类引用,可以指向基类对象或派生类对象,所以可以使用TableTennis  或RatedPlayer

 TableTennisPlayer player1("Tara","Boomdea",false);
RatedPlayer rplayer1(1111,"Mallory","Duck",true);
Show(player1);
Show(rplayer1):

  对于形参指向基类的指针的函数,也存在此关系,它可以使用基类对象的地址或派生类对象的地址作为实参。
   void Wohs(const TableTennisPlayer *pt) ;//function with pointer parameter
   RatedPalyer rplayer(1111,"Mallory","Duck",true);
  Wohs(&rplayer);

   引用兼容性属性也能够将基类对象初始化为派生类对象
     RatedPlayer olaf1(1111,"Olaf","loaf",true);
    TableTennisPlayer olaf2(olaf1);
   要初始化olaf2 , 匹配的构造函数如下:
    TableTennisPlayer( const RatedPlayer &);
    类定义中没有这样的构造函数,但存在隐式复制构造函数
   TableTennisPlayer(const TableTennisPlayer &);
   形参是基类引用,它可以引用派生类对象。

    --------------------------------------------------------
     可以将派生类对象赋予基类对象

   RatedPlayer olaf1(1111,"olaf","loaf",true);
   TableTennisPlayer winner;
  winner =  olaf1;  //assign derived to base object
  在这情况下,程序使用隐式重载赋值操作符:
  TableTennisPlayer  & operator=(const TableTennisPlayer &) const;

  基类引用的也是派生类对象。
posted on 2008-09-21 16:19 jz 阅读(226) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航:   博客园   博客园最新博文   博问   管理