CPP——多态

认识多态(动态联编)

#include<iostream>
using namespace std;

class student{   
    protected:
    	string name;
       	int num;
    public:
    student();
    student(char *, char *);
    ~student();
   virtual void print()//虚函数的关键字,父类中加了,子类中同名的所有函数也会变成虚函数(但是建议也加上virtual)
    {
        cout << name << num << endl;
    }//去掉{}内的内容,换成“=0”,他便变成纯虚函数,不需要去添加内容。当变成纯虚函数,系统会要求所有子类内的同名函数必须实现,补实现便会报错。此时这个类便会变成虚基类/虚父类,且不能用它去定义实例,但是指针可以。
};

class IOTstudent : public student
{
private:
    int cpp;
public:
   IOTstudent(){}
   IOTstudent(string name, int num1, int num2)
       :Student(name, num1)
   {
       cpp = num2;
   }
    virtual void print()
    {
        cout << name << num << cpp << endl;
    }
};

student::student(char *n1, int num1)
{
    ………………;
}

void f(student* p)
{
    p->print();
}

int main()
{
    student s1("zhang", 20230001), *p1;
    IOTstudent s2("li", 20230002, 86);
   
    f(&s1);
    f(&s2);
    //没加上virtual关键字两个都是调用父类的print,为静态联编,以指针类型去调用函数;但是当你加上之后,便会变成动态联编,以指针所指对象类型去调用函数,第一个调用父类的print,第二个调用子类的print!!!!!!!!!!!!!!!!!!!!!!!!!!!
    
    return 0;
}
//加上之后,在调用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值