• 基类类型和派生类型之间的转换以及虚函数


     1 #include <string>
     2 #include <iostream>
     3 using namespace std;
     4 
     5 class Animal{
     6 public:
     7     Animal(string name) : name(name){}
     8     void printName(){
     9         cout<<name<<endl;
    10     }
    11     virtual void printSpecialSkill(){};
    12 private:
    13     string name;
    14 };
    15 
    16 class Bird : public Animal {
    17 public:
    18     Bird(string name,string specialSkill) : Animal(name),specialSkill(specialSkill){}
    19     void printSpecialSkill(){
    20         cout<<specialSkill<<endl;
    21     }
    22 
    23 private:
    24     string specialSkill;
    25 };
    26 
    27 class Fish : public Animal {
    28 public:
    29     Fish(string name,string specialSkill) : Animal(name),specialSkill(specialSkill){}
    30     void printSpecialSkill(){
    31         cout<<specialSkill<<endl;
    32     }
    33 
    34 private:
    35     string specialSkill;
    36 };
    37 
    38 
    39 
    40 int main()
    41 {
    42     Bird *PBird = new Bird("Powl","fly");
    43     Bird ObjBird("ObjBird","fly");
    44 
    45     Fish ObjFish("ObjShark","swim");
    46 
    47     Animal ObjAnimal(ObjBird);
    48     ObjAnimal.printName();
    49     /*派生类型的对象赋值到基类类型,派生对象部分的函数和数据成员会被截断。
    50     所以这里无输出*/
    51     ObjAnimal.printSpecialSkill(); 
    52 
    53     /*派生类型的对象,可以用它的地址对基类类型的指针进行赋值或者初始化。
    54     基类指针指向派生类对象,实现多态和虚函数*/
    55     Animal* PAnimal = &ObjBird;
    56     PAnimal->printName();
    57     /*派生类对象赋值给基类指针,则不会发生截断*/
    58     PAnimal->printSpecialSkill();
    59 
    60     PAnimal = &ObjFish;
    61     PAnimal->printName();
    62     PAnimal->printSpecialSkill();
    63 }

    1.没有从基类引用(或基类指针)到派生类引用(或派生类指针)的自动转换。

    2.派生类型的对象,可以用它的地址对基类类型的指针进行赋值或者初始化

    3.派生类型的对象赋值到基类类型,派生对象部分的函数和数据成员会被截断。

    Coding Life
  • 相关阅读:
    『GoLang』接口
    『GoLang』结构体与方法
    『GoLang』包
    『GoLang』字典Map
    『GoLang』数组与切片
    利用griddata进行二维插值
    HTML 标签的 for 属性
    python之成像库pillow
    Python之模块IO
    StringIO和BytesIO
  • 原文地址:https://www.cnblogs.com/lewiskyo/p/4603736.html
Copyright © 2020-2023  润新知