亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

通過動物類實例化狗類通過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++遠征之多態篇
  • 參與學習       66224    人
  • 解答問題       334    個

本教程將帶領大家體會面向對象三大特性中的多態特性

進入課程

通過動物類實例化狗類通過new

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號