首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >动态多态与静态多态

动态多态与静态多态

作者头像
GeekLiHua
发布2025-01-21 16:10:49
发布2025-01-21 16:10:49
3260
举报
文章被收录于专栏:JavaJava

动态多态与静态多态

概述

  • 动态多态(动态绑定):即运行时的多态,在程序执行期间(非编译期)判断所引用对象的实际类型,根据其实际类型调用相应的方法,在发生继承中,对父类中的带有virtual修饰的函数进行重写,类似于Java中的接口。
  • 静态多态:也称为编译期间的多态,编译器在编译期间完成的,在发生继承中,对父类的同名函数进行重定义(虚函数除外),重定义只用函数名相同即可,其他均可不同,就会将父类的同名函数屏蔽,这个时候想要访问父类的同名函数的话,需要加上作用域。 静态多态实现方式:
    • 函数重载:包括普通函数的重载和成员函数的重载
    • 函数模板的使用

案例讲解

动态多态

学习代码

代码语言:javascript
复制
#include<iostream>
using namespace std;


class A
{
public:
    A(){
        
    }
    virtual ~A(){
        cout << "A discontruct" << endl;
    }
	virtual string OnPaint() = 0; // 定义接口
};

class B : public A
{
public:
	virtual string OnPaint()
	{
		cout<< "B" << endl;
		return "B";
	}
	virtual ~B(){
	    cout << "B discontruct" << endl;
	}
};

class C : public A
{
public:
	virtual string OnPaint()
	{
		cout<< "C" << endl;
		return "C";
	}
	virtual ~C(){
	    cout << "C discontruct" << endl;
	}
};

int main()
{
	A* p = new B();
	p->OnPaint(); // B
	delete p;

	p = new C(); 
	p->OnPaint(); // C
	delete p;
	
	return 0;
}

运行结果

静态多态

学习代码

  • 使用模板
代码语言:javascript
复制
// 交换两个值,但是不清楚是int 还是 double,如果不使用模板,则要写两份代码
// 使用函数模板,将类型作为参数传递
template<class T>
class Swa(T a,T b)
{
    T temp;
    temp = a;
    a = b;
    b = temp;
};
  • 继承关系
代码语言:javascript
复制
#include<iostream>
using namespace std;


class A
{
public:
    A(){
        
    }
    ~A(){
        
    }
	void OnPaint(){
	    cout << "A" << endl;
	}
};

class B : public A
{
public:
	string OnPaint()
	{
		cout<< "B" << endl;
		return "B";
	}
};

class C : public A
{
public:
	string OnPaint()
	{
		cout<< "C" << endl;
		return "C";
	}
};

int main()
{
	// 静态多态的函数返回值等等都可以改变
	A* p = new B();
	p->OnPaint(); // A
	delete p;

	p = new C(); 
	p->OnPaint(); // A
	delete p;
	
	return 0;
}

运行结果

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 动态多态与静态多态
    • 概述
    • 案例讲解
      • 动态多态
      • 静态多态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档