式武神

导航

第五次实验

1.(1)在多层继承中,派生类中出现与基类同名成员时,通过对象名.成员名的方式,访问的成员什么?

访问的成员是该对象名所在类的成员。

(2)通过基类指针访问派生类对象时,基类中成员函数有无关键字virtual,访问的成员分别是什么?

有virtual时访问的是派生类的成员,无virtual时访问的是基类的成员。

3.设计并实现一个机器宠物类MachinePets。

#include<iostream>
#include"machinepets.h"
#include"petcats.h"
#include"petdogs.h"
using namespace std;
void play(MachinePets &v)
{
    cout << v.getnickname() << " says " << v.talk() << endl;
}
int main()
{
    PetCats cat("miku");
    play(cat);
    PetDogs dog("da huang");
    play(dog);
    system("pause");
    return 0;
}
main.cpp
#ifndef MACHINEPETS_H
#define MACHINEPETS_H
#include<iostream>
#include<string>
using namespace std;
class MachinePets {
public:
    MachinePets(const string s = " ") :nickname(s) {}
    virtual string talk() = 0;
    string getnickname() {
        return nickname;
    }
private:
    string nickname;
};
#endif
machinepets.h
#ifndef PETCATS_H
#define PETCATS_H
class PetCats : public MachinePets {
public:
    PetCats(const string s) :MachinePets(s) {}
    string talk() {
        return "miao wu~";
    }
};
#endif
petcats.h
#ifndef PETDOGS_H
#define PETDOGS_H
class PetDogs : public MachinePets {
public:
    PetDogs(const string s) :MachinePets(s) {}
    string talk() {
        return "wang wang~";
    }
};
#endif
petdogs.h

实验总结与体会:

1.本实验让我更深刻地了解了虚函数、纯虚函数、抽象类的定义和使用

2.我知道了通过基类指针访问派生类对象时,基类中成员函数有无关键字virtual的区别,有virtual时访问的是派生类的成员,无virtual时访问的是基类的成员。

3.我知道了在派生类中出现与基类同名成员时,通过派生类访问该同名成员时,访问的只是派生类中的成员,基类中的被自动忽略。


posted on 2019-05-28 22:12  式武神  阅读(115)  评论(1编辑  收藏  举报