課程
/后端開發
/C++
/C++遠征之多態篇
能否在棧上實現?不用new
2015-09-14
源自:C++遠征之多態篇 3-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;
? ? // 數據成員
string m_strName;
};
?* 定義狗類:Dog
?* 公有繼承動物類
?* 虛成員函數:eat()、move()
class Dog : public Animal
? ? 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;}
int main(void)
? ? // 通過動物類實例化狗類
? ? Dog a(狗類);
? ? Animal *pa = a;
? ? // 調用成員函數
pa->eat();
? ? pa->move();
? ? // 釋放內存
delete *pa;
pa = NULL;
? ??
return 0;
}
可以啊,Dog dog(“狗類” );Animal ani = dog;
你在函數中定義的對象都是在棧上的。
new 是實例化對象的語法,存在堆上的,為什么要用棧呢?棧是存儲函數參數的臨時地方。
星小辰 提問者
舉報
本教程將帶領大家體會面向對象三大特性中的多態特性
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2017-03-30
#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;
}
2015-12-18
可以啊,Dog dog(“狗類” );Animal ani = dog;
2015-09-14
你在函數中定義的對象都是在棧上的。
2015-09-14
new 是實例化對象的語法,存在堆上的,為什么要用棧呢?棧是存儲函數參數的臨時地方。