第五次实验

本文通过具体的C++代码示例,探讨了派生类与基类的关系,重点讲解了纯虚函数如何使派生类实现多态行为。实验展示了不同派生类通过同一接口调用各自特化的函数,揭示了多态机制在C++中的应用。

验证性实验一

第一个是将派生类变成了基类,第二个则是因为虚函数的存在,派生类不会变为基类。

验证性实验二

由于有纯虚数的存在,三个派生类可以用同一个函数实现三个派生类各自的需要,比较方便。

实验三

mian.cpp

#include<iostream>
#include<string>
#include"PetCats.h"
#include"PetDogs.h"
using namespace std;
void play(MachinePets &a);
int main() {
PetCats cat("miku");
PetDogs dog("da huang");
play(cat); // 按照play()形参,传递参数
play(dog); // 按照play()形参,传递参数
return 0;
}
void play(MachinePets &a){
    cout<<a.getnickname()<<" says "<<a.talk()<<endl;
}

machinepet.h

#ifndef MACHINEPETS_H
#define MACHINEPETS_H
#include<iostream>
#include<string>
using namespace std;
class MachinePets{
public:
    MachinePets(string s):nickname(s){}
    string getnickname();
    virtual string talk()=0;
    friend void play(MachinePets *a);
private:
    string nickname;
};
#endif // !MACHINEPETS_H

machinepet.cpp

#include<iostream>
#include<string>
#include"MachinePets.h"
using namespace std;
string MachinePets::getnickname(){
    return nickname;
}

petcats.h

#ifndef PETCATS_H
#define PETCATS_H
#include"MachinePets.h"
#include<string>
using namespace std;
class PetCats:public MachinePets{
public:
	PetCats(const string s);
	string talk();
};
#endif

petcats.cpp

#include<iostream>
#include<string>
#include"MachinePets.h"
#include"PetCats.h"
using namespace std;
PetCats::PetCats(const string s):MachinePets(s){
}
string PetCats::talk(){
    return "miao wu~";
}

petdogs.h

#ifndef PETDOGS_H
#define PETDOGS_H
#include"MachinePets.h"
using namespace std;
#include<string>
class PetDogs:public MachinePets{
public:
    PetDogs(const string s);
    string talk();
};
#endif

petdogs.cpp

#include<iostream>
#include<string>
#include"PetDogs.h"
#include"MachinePets.h"
using namespace std;
PetDogs::PetDogs(const string s):MachinePets(s){
    
}
string PetDogs::talk(){
    return "wang wang~";
}

对纯虚数还不太理解,以至于开始的时候在两个派生类中没有声明虚函数的函数,还要继续努力。

转载于:https://www.cnblogs.com/0906mxyd/p/10975834.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值