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

通过动物类实例化狗类通过new

能否在栈上实现?不用new

正在回答

4 回答

#include <iostream>

#include <stdlib.h>

#include <string>

using namespace std;


/**

 * 定义动物类:Animal

 * 虚函数:eat()

 * 纯虚函数:move()

 * 数据成员:m_strName

 */

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;

};


/**

 * 定义狗类:Dog

 * 公有继承动物类

 * 虚成员函数:eat()、move()

 */

class Dog : public Animal

{

public:

    // 默认构造函数

    Dog(){}

    // 含参构造函数

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

    // 虚析构函数

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

    // 虚成员函数eat()

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

    // 虚成员函数move()

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

public:

    // 数据成员

string m_strName;

};


int main(void)

{

    // 通过动物类实例化狗类

    Dog a(狗类);

    Animal *pa = a;

    // 调用成员函数

pa->eat();

    pa->move();

    // 释放内存

delete *pa;

pa = NULL;

    

return 0;

}


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

可以啊,Dog dog(“狗类” );Animal ani = dog;

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

你在函数中定义的对象都是在栈上的。

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

new 是实例化对象的语法,存在堆上的,为什么要用栈呢?栈是存储函数参数的临时地方。

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

星小辰 提问者

Dog animal("狗类");这算不算实例化一个“狗类”?
2015-09-16 回复 有任何疑惑可以回复我~

举报

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

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

进入课程

通过动物类实例化狗类通过new

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信