C++多态

本文通过具体的 C++ 代码示例介绍了多态(polymorphism)的概念及其应用,重点展示了如何使用虚函数实现运行时多态,并探讨了指向基类的指针调用派生类成员的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//多态 polymorphism
#include<iostream>
using namespace std;
#include<string>
class Person{
protected:
string name;
private:
bool gender;
public:
void eat(const char* food){cout<<name<<"在吃"<<food<<"."<<endl;}
void sleep();
//虚函数 调用时不会根据指针什么类型调用 而是根据函数什么类型调用
virtual void show(){cout<<"大家好,我是"<<(gender?"男的":"女的")<<name<<endl;}


Person(const char* name,bool gender):name(name),gender(gender){}
string Name()const{return name;}
};


class Teacher:public Person
{
string course;
public:
void teach(const char* _class){
cout<<name<<"在给"<<_class<<"班讲"<<course<<"课程"<<endl;
}
Teacher(const char* name,bool gender,const char* course):Person(name,gender),course(course){ }
void show(const char* _class)//改写来自父类的成员,隐藏来自父类那个同名成员
{cout<<"同学好"<<course<<"老师在这"<<_class<<endl;}
void show()
{cout<<"同学好"<<course<<"老师在这"<<endl;}
};


int main()
{
Person a("hehe",false);
Teacher b("heihei",true,"UNIX C");


Person* p = NULL,*q = NULL;
p = &a;
q = &b;
Person c = b;
Person& d = b;
c.show();
p->show();
q->show();
d.show();
//dynamic_cast<子类*>(父类对象地址) 如果是父类对象的子类 则返回父类地址 否则返回NULL (父类中必须有虚函数)
cout<<dynamic_cast<Teacher*>(q)<<endl;
cout<<dynamic_cast<Teacher*>(p)<<endl;
cout<<dynamic_cast<Teacher*>(&c)<<endl;
cout<<dynamic_cast<Teacher*>(&d)<<endl;
//type_info:类型信息 <typeinfo>
typeid(类型);
typeid(对象);

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值