• 智能指针虚析构函数基类指针访问子类方法


     “计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决” 

    “Any problem  in computer science can be solved by anther layer of indirection.”
                                  ——David Wheeler(剑桥大学计算机科学教授)
     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 class Fa
     6 {
     7 public:
     8     virtual void Show()
     9     {
    10         cout << "father show" << endl;
    11     }
    12     virtual ~Fa()
    13     {
    14         cout << "father destructor" << endl;
    15     }
    16 };
    17 
    18 class Tclass :public Fa
    19 {
    20     float pa;
    21     double pb;
    22     string name;
    23     int age;
    24 public:
    25     Tclass(float pa = 1.0, double pb = 2.0, string name = "all", int age = 20)
    26     {
    27         this->pa = pa;
    28         this->pb = pb;
    29         this->name = name;
    30         this->age = age;
    31     }
    32     void Show() override
    33     {
    34         std::cout << pa << " " << pb << " " << name << " " << age << endl;
    35     }
    36 
    37     ~Tclass()
    38     {
    39         cout << "call Tclass destructor" << endl;
    40     }
    41 };
    42 class Tcb :public Fa
    43 {
    44 public:
    45     void Show()override
    46     {
    47         cout << "Tcb show" << endl;
    48     }
    49     ~Tcb()
    50     {
    51         cout << "call Tcb destructor" << endl;
    52     }
    53 };
    54 class Shhanlde
    55 {
    56     Fa* ta;
    57 public:
    58     Shhanlde(Tclass *tcls)
    59     {
    60         ta = tcls;
    61     }
    62     Shhanlde(Tcb *tcls)
    63     {
    64         ta = tcls;
    65     }
    66     Fa* GetPt()
    67     {
    68         return ta;
    69     }
    70 
    71     ~Shhanlde()
    72     {
    73         delete ta;
    74     }
    75 };
    76 
    77 int main()
    78 {
    79     {
    80         shared_ptr<Shhanlde> tc = make_shared<Shhanlde>(new Tclass());
    81         tc->GetPt()->Show();
    82         tc = make_shared<Shhanlde>(new Tcb());
    83         tc->GetPt()->Show();
    84     }
    85 
    86     cout << "test" << endl;
    87     return 0;
    88 }

  • 相关阅读:
    Springboot操作域对象
    Thymeleaf的条件判断和迭代遍历
    Thymeleaf的字符串与变量输出的操作
    window 2003 实现多用户远程登录
    非常漂亮js动态球型云标签特效代码
    Echarts运用
    sass、less和stylus的安装使用和入门实践
    java,js 解unicode
    Java上传下载excel、解析Excel、生成Excel
    小知识点应用
  • 原文地址:https://www.cnblogs.com/chenxiaolinembed/p/16248556.html
Copyright © 2020-2023  润新知