为了账号安全,请及时绑定邮箱和手机立即绑定

Animal 是纯虚函数?

Animal 是纯虚函数,可是为什么可以用来实例化对象呢?

Animal *animal=new Dog("狗类");

这样写竟然可以通过编译!!!!!

正在回答

3 回答

你所说的Animal是一个类,而这个类中有一个纯虚函数对吧,而你实例化的时候,是实例的它的子类Dog这个类,而在Dog这个类中实现了Move这个函数,所以能实例化

0 回复 有任何疑惑可以回复我~
#1

qq_阳光下的海风_0 提问者

Animal *animal=new Dog("狗类"); 这个语句是不是可以分解出“Animal *animal”,这个语句不算是实例化了一个对象吧? 我知道“Animal *animal”是不会调用构造函数的,但我不知道这个语句算不算实例化了一个对象 ?
2015-10-29 回复 有任何疑惑可以回复我~
#2

心悦君夕 回复 qq_阳光下的海风_0 提问者

这个你要看后面的类,你是new Dog这个类,而不是直接new的Animal这个类
2015-10-30 回复 有任何疑惑可以回复我~
#3

qq_阳光下的海风_0 提问者 回复 心悦君夕

嗯,现在理解了,谢啦
2015-11-07 回复 有任何疑惑可以回复我~
#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;


class Animal
{
public:

    Animal() {}

    Animal(string name)
    {
        m_strName = name;
        cout << "Animal" << endl;
    }

    virtual  ~Animal()
    {
        cout << "~Animal" << endl;
    }

    virtual void eat()
    {
        cout << "Animal--" << m_strName << "-- eat" << endl;
    }

    virtual void Move() =0;
public:

    string m_strName;
};


class Dog : public Animal
{
public:

    Dog() {}

    Dog(string name)
    {
        m_strName = name;
        cout << "Dog" << endl;
    }

    virtual ~Dog()
    {
        cout << "~Dog" << endl;
    }

    virtual void eat()
    {
        cout << "Dog--" << m_strName << " -- eat" << endl;
    }

    virtual void Move()
    {
        cout << "Dog--" << m_strName << " -- move" << endl;
    }
public:

    string m_strName;
};

int main(void)
{

    Animal *animal=new Dog("狗类");
    animal->eat();
    animal->Move();

    delete animal;
    animal=NULL;

    return 0;
}

Animal *animal=new Dog("狗类");就是这句代码

0 回复 有任何疑惑可以回复我~

你代码呢?

0 回复 有任何疑惑可以回复我~
#1

qq_阳光下的海风_0 提问者

老师,不还意思哈,由于要写代码,所以我就直接写在评论里了,麻烦老师去我的评论里看一下
2015-10-28 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之多态篇
  • 参与学习       66209    人
  • 解答问题       334    个

本教程将带领大家体会面向对象三大特性中的多态特性

进入课程

Animal 是纯虚函数?

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号