首页 > 其他分享 >多态(一)

多态(一)

时间:2023-08-14 20:31:34浏览次数:22  
标签:调用 函数 子类 多态 virtual Person

多态

多态就是多种形态,具体点就是当不同的对象去完成时会产生不同的状态。

virtual加在一个虚函数的前面,我们叫做虚函数。

虚继承和虚函数没有关系。

函数名相同,参数列表相同他们叫做重写或者覆盖,这里没有重载的关系,重载必须在同一个作用域。

#include <iostream>
using namespace std;
class Person {
public:
	virtual void Buyticket()
	{
		cout << "买票-全价" << endl;
	}
};
class Student :public Person {
public:
	//重写/覆盖
	virtual void Buyticket()
	{
		cout << "买票-半价" << endl;
	}
};
void Func(Person& p)
{
	p.Buyticket();
}
int main()
{
	Student s;
	Person p;
	Func(s);
	Func(p);
	return 0;
}

构成多态以后传父类调用的是父类的虚函数,传子类调用的是子类的虚函数。

Func函数参数中既可以传父类的对象也可以传子类的对象。

多态的两个条件:1.虚函数的重写,三同(函数名、参数、返回值);2.父类的指针或者引用去调用。

那当我们不使用指针或者引用的时候能不能调用?不能。

image-20230421092937493

我们来看一下,有些情况没有多态不行

class Person {
public:
	~Person()
	{
		cout << "~Person" << endl;

	}
};
class Student :public Person {
public:
	//重写/覆盖
	~Student() {
		cout << "~Student" << endl;
}
};

int main()
{
	Person p;
	Student s;
	return 0;
}

image-20230421093316392标记

标签:调用,函数,子类,多态,virtual,Person
From: https://blog.51cto.com/u_15562309/7081283

相关文章

  • 第5章 消息、继承与多态1
    第5章消息、继承与多态5.1消息5.2访问控制5.3多态机制5.4继承机制5.5抽象类、接口与包第5章消息、继承与多态5.1消息5.1.1消息的概念在日常生活中,人与人之间要进行交流,某人可以向别人提供服务,例如,他可以开汽车,教学生学习等;同时他也需要别......
  • 【C#学习笔记】什么是多态
    什么是多态?就是一个对象,调用同一个方法,却有不同的表现?一个对象怎么可能调用同一个方法,怎么可能会有不同的表现呢?是参数类型不一样还是参数数量不一样?不,那些都是重载。多态必须建立在继承之上。多态的三种实现方式:虚函数、抽象类、接口。......
  • 多态(一)
    多态多态就是多种形态,具体点就是当不同的对象去完成时会产生不同的状态。把virtual加在一个虚函数的前面,我们叫做虚函数。虚继承和虚函数没有关系。函数名相同,参数列表相同他们叫做重写或者覆盖,这里没有重载的关系,重载必须在同一个作用域。#include<iostream>usingnamespac......
  • Java三大特性之--多态基础
    半年前学的已经忘了,现在来复习一下。。。1、多态的一个小例子 publicclassPolyObject{publicstaticvoidmain(String[]args){//体验对象多态特点//animal编译类型就是Animal,运行类型DogAnimalanimal=newDog();//因为运行时,执行到改行时,animal运行......
  • C++ 多态深入解析
    @TOC前言在C++编程中,多态性(Polymorphism)是一种重要的概念,它允许基于对象的实际类型来调用不同的函数。多态性提供了灵活性和可扩展性,使得代码更易于维护和扩展。一、什么是多态多态性的定义:多态性是一种面向对象编程的特性,它允许使用基类的指针或引用来调用派生类对象的特定成员函......
  • JavaSE--多态在开发中的作用
    一、多态在开发中的作用  1、降低程序的耦合度,提高程序的扩展力  publicclassMaster(){    publicvoidfeed(Dogd){}    publicvoidfeed(Dogd){}  }  以上代码中:Master和Dog、Cat关系紧密,耦合度高,导致扩展力很差  publicclassMaster(){   ......
  • JavaSE--方法覆盖和多态
    一、方法覆盖Override1、什么时候使用Override  例如:以下代码:鸟儿在执行move方法时,最好输出“鸟儿在飞翔”,但是当前程序在执行move方法时,输出“动物在移动”,显然Bird子类继承来的方法无法满足需求  子类继承父类之后,当继承过来的方法无法满足当前子类的业务需求时,子类有权......
  • C++类和对象_多态
    虚函数被virtual修饰的成员函数被称为虚函数,虚函数的地址会被纳入类的虚函数表(virtualfunctiontable)。inline和virtual不会同时生效,用virtual修饰内联函数时,编译器会忽视函数的内联属性,此时函数不再是内联。虚函数一定不是内联函数。虚函数的重写子类继承父类,并有一个与父类......
  • 1-3 多态、模板
    1多态多态分两类:静态多态:函数重载和运算符重载,即复用函数名动态多态:派生类和虚函数来实现运行时多态区别:静态多态在编译阶段确定函数地址动态多态在运行阶段确定函数地址,根据传入的对象不同确定具体的执行函数动态多态满足条件:首先要有继承关系子类要重写父类的虚......
  • 封装、继承、多态及重载
    1.封装​封装是面向对象的核心思想,将对象的属性和行为封装起来,不需要让外界知道具体实现细节,避免了外界直接访问对象属性而造成耦合度过高及过度依赖,同时也阻止了外界对对象内部数据的修改而可能引发的不可预知错误。例子1:封装后通过实例化来访问类里边的变量例子2:封......