zoukankan      html  css  js  c++  java
  • C++多态必须使用指针或者引用,直接传对象就变成切片

    C++ 多态必须使用指针或者引用,直接传对象就变成切片。虚函数的魔力只对指针和引用有效。按值传递对象不允许调用虚函数。

    #include <stdio.h>
    #include <iostream>
    #include <string>
    using namespace std;

    class base {
    public:
    virtual void print() {
    cout<<"it is in base::print"<<endl;
    }
    virtual ~base(){}
    };

    class son:public base {
    public:
    virtual void print() {
    cout<<"it is in son::print"<<endl;
    }
    virtual ~son(){}
    };

    class grandson:public son {
    public:
    virtual void print() {
    cout<<"it is in grandson::print"<<endl;
    }
    virtual ~grandson(){}
    };

    void fun(base arge) { // 基类对print()的调用
    arge.print();
    }
    void func(base& arge) { // 静态多态
    arge.print();
    }

    void func_t(base* arge){ // 动态多态
    arge->print();
    }

    int main() {
    base a;
    son b;
    grandson c;
    func_t(&a);// good
    func_t(&b);
    func_t(&c);

    base d;
    son e;
    grandson f;
    func(d); // good
    func(e);
    func(f);

    base g;
    son h;
    grandson i;
    fun(g);// 不体现多态,都是调用的base类的print方法
    fun(h);// 不体现多态,都是调用的base类的print方法
    fun(i);// 不体现多态,都是调用的base类的print方法
    return 0;
    }

  • 相关阅读:
    爬虫-scrapy初试
    python-爬虫day1
    django 内存地址列表-->转换为-->字典
    django 基于 form 验证 确认密码的注册
    django 请求过程,生命周期
    django7 models 高级应用
    django6-项目练习
    Mysql之起始
    python之IO模型
    python模块之Gevent(协程)
  • 原文地址:https://www.cnblogs.com/findumars/p/3063790.html
Copyright © 2011-2022 走看看