#include<iostream>
using namespace std;
#include<string>
//分別利用普通寫法和多態(tài)技術(shù)實現(xiàn)計算器
//普通寫法
class Calculator {
public:
?? ?int getResult(string oper)
?? ?{
?? ??? ?if (oper == "+") {
?? ??? ??? ?return m_Num1 + m_Num2;
?? ??? ?}
?? ??? ?else if (oper == "-") {
?? ??? ??? ?return m_Num1 - m_Num2;
?? ??? ?}
?? ??? ?else if (oper == "*") {
?? ??? ??? ?return m_Num1 * m_Num2;
?? ??? ?}
?? ??? ?//如果想擴展新的功能,需要修改源碼
?? ??? ?//在真實開發(fā)中? 提供? 開閉原則
?? ??? ?//開閉原則:對擴展進行開發(fā),對修改進行關(guān)閉
?? ?}
public:
?? ?int m_Num1;//操作數(shù)1
?? ?int m_Num2;//操作數(shù)2
};
void test01()
{
?? ?//普通實現(xiàn)測試
?? ?//創(chuàng)建計算器對象
?? ?Calculator c;
?? ?c.m_Num1 = 10;
?? ?c.m_Num2 = 10;
?? ?cout << c.m_Num1 << " + " << c.m_Num2 << " = " << c.getResult("+") << endl;
?? ?cout << c.m_Num1 << " - " << c.m_Num2 << " = " << c.getResult("-") << endl;
?? ?cout << c.m_Num1 << " * " << c.m_Num2 << " = " << c.getResult("*") << endl;
}
//利用多態(tài)實現(xiàn)計算器
//實現(xiàn)計算器抽象類
//多態(tài)優(yōu)點:代碼組織結(jié)構(gòu)清晰,可讀性強,利于前期和后期的擴展以及維護
class AbstractCalculator
{
public :
?? ?virtual int getResult()
?? ?{
?? ??? ?return 0;
?? ?}
?? ?int m_Num1;
?? ?int m_Num2;
};
//加法計算器
class AddCalculator :public AbstractCalculator
{
public:
?? ?int getResult()
?? ?{
?? ??? ?return m_Num1 + m_Num2;
?? ?}
};
//減法計算器
class SubCalculator :public AbstractCalculator
{
public:
?? ?int getResult()
?? ?{
?? ??? ?return m_Num1 - m_Num2;
?? ?}
};
//乘法計算器
class MulCalculator :public AbstractCalculator
{
public:
?? ?int getResult()
?? ?{
?? ??? ?return m_Num1 * m_Num2;
?? ?}
};
void test02()
{
?? ?//多態(tài)使用條件
?? ?//父類指針或者引用指向子類對象
?? ?//創(chuàng)建加法計算器
?? ?AbstractCalculator * abc = new AddCalculator;
?? ?abc->m_Num1 = 10;
?? ?abc->m_Num2 = 10;
?? ?cout << abc->m_Num1 << " + " << abc->m_Num2 << " = " << abc->getResult() << endl;
?? ?delete abc;? //用完了記得銷毀
?? ?//創(chuàng)建減法計算器
?? ?abc = new SubCalculator;
?? ?abc->m_Num1 = 10;
?? ?abc->m_Num2 = 10;
?? ?cout << abc->m_Num1 << " - " << abc->m_Num2 << " = " << abc->getResult() << endl;
?? ?delete abc; ?
?? ?//創(chuàng)建乘法計算器
?? ?abc = new MulCalculator;
?? ?abc->m_Num1 = 10;
?? ?abc->m_Num2 = 10;
?? ?cout << abc->m_Num1 << " * " << abc->m_Num2 << " = " << abc->getResult() << endl;
?? ?delete abc;
}
int main() {
?? ?//test01();
?? ?test02();
?? ?system("pause");
?? ?return 0;
}
總結(jié):C++開發(fā)提倡利用多態(tài)設(shè)計程序架構(gòu),因為多態(tài)優(yōu)點很多
#include<iostream>
using namespace std;
//抽象制作飲品
class AbstractDrinking
{
public:
?? ?//燒水
?? ?virtual void Boil() = 0;
?? ?//沖泡
?? ?virtual void Brew() = 0;
?? ?//倒入杯中
?? ?virtual void PourInCup() = 0;
?? ?//加入輔料
?? ?virtual void PutSomething() = 0;
?? ?//規(guī)定流程
?? ?void MakeDrink()
?? ?{
?? ??? ?Boil();
?? ??? ?Brew();
?? ??? ?PourInCup();
?? ??? ?PutSomething();
?? ?}
};
//制作咖啡
class Coffee : public AbstractDrinking
{
public:
?? ?//燒水
?? ?virtual void Boil()
?? ?{
?? ??? ?cout << "煮農(nóng)夫山泉!" << endl;
?? ?}
?? ?//沖泡
?? ?virtual void Brew()
?? ?{
?? ??? ?cout << "沖泡咖啡!" << endl;
?? ?}
?? ?//倒入杯中
?? ?virtual void PourInCup()
?? ?{
?? ??? ?cout << "將咖啡倒入杯中!" << endl;
?? ?}
?? ?//加入輔料
?? ?virtual void PutSomething()
?? ?{
?? ??? ?cout << "加入牛奶!" << endl;
?? ?}
};
//制作茶水
class Tea : public AbstractDrinking
{
public:
?? ?//燒水
?? ?virtual void Boil()
?? ?{
?? ??? ?cout << "煮自來水!" << endl;
?? ?}
?? ?//沖泡
?? ?virtual void Brew()
?? ?{
?? ??? ?cout << "沖泡茶葉!" << endl;
?? ?}
?? ?//倒入杯中
?? ?virtual void PourInCup()
?? ?{
?? ??? ?cout << "將茶水倒入杯中!" << endl;
?? ?}
?? ?//加入輔料
?? ?virtual void PutSomething()
?? ?{
?? ??? ?cout << "加入枸杞!" << endl;
?? ?}
};
//制作函數(shù)
void DoWork(AbstractDrinking * drink)
{
?? ?drink->MakeDrink();
?? ?delete drink;
}
void test01()
{
?? ?//制作咖啡
?? ?DoWork(new Coffee);
?? ?cout << "--------------" << endl;
?? ?//制作茶葉
?? ?DoWork(new Tea);
}
int main()
{
?? ?test01();文章來源:http://www.zghlxwxcb.cn/news/detail-830121.html
?? ?system("pause");
?? ?return 0;
}
#include<iostream>
using namespace std;
//抽象不同零件類
//抽象CPU類
class CPU
{
public:
?? ?//抽象的計算函數(shù)
?? ?virtual void calculate() = 0;
};
//抽象顯卡類
class VideoCard
{
public:
?? ?//抽象的顯示函數(shù)
?? ?virtual void display() = 0;
};
//抽象內(nèi)存條類
class Memory
{
public:
?? ?//抽象的存儲函數(shù)
?? ?virtual void storage() = 0;
};
//電腦類
class Computer
{
public:
?? ?Computer(CPU * cpu, VideoCard * vc, Memory * mem)
?? ?{
?? ??? ?m_cpu = cpu;
?? ??? ?m_vc = vc;
?? ??? ?m_mem = mem;
?? ?}
?? ?//提供工作的函數(shù)
?? ?void work()
?? ?{
?? ??? ?//讓零件工作起來,調(diào)用接口
?? ??? ?m_cpu->calculate();
?? ??? ?m_vc->display();
?? ??? ?m_mem->storage();
?? ?}
?? ?//提供析構(gòu)函數(shù) 釋放3個電腦零件
?? ?~Computer()
?? ?{
?? ??? ?//釋放CPU零件
?? ??? ?if (m_cpu != NULL)
?? ??? ?{
?? ??? ??? ?delete m_cpu;
?? ??? ??? ?m_cpu = NULL;
?? ??? ?}
?? ??? ?//釋放顯卡零件
?? ??? ?if (m_vc != NULL)
?? ??? ?{
?? ??? ??? ?delete m_vc;
?? ??? ??? ?m_vc = NULL;
?? ??? ?}
?? ??? ?//釋放內(nèi)存條零件
?? ??? ?if (m_mem != NULL)
?? ??? ?{
?? ??? ??? ?delete m_mem;
?? ??? ??? ?m_mem = NULL;
?? ??? ?}
?? ?}
private:
?? ?CPU * m_cpu;????? //CPU的零件指針
?? ?VideoCard * m_vc; //顯卡零件指針
?? ?Memory * m_mem;?? //內(nèi)存條零件指針
};
//具體廠商
//Intel廠商
class IntelCPU :public CPU
{
public:
?? ?virtual void calculate()
?? ?{
?? ??? ?cout << "Intel的CPU開始計算了!" << endl;
?? ?}
};
class IntelVideoCard :public VideoCard
{
public:
?? ?virtual void display()
?? ?{
?? ??? ?cout << "Intel的顯卡開始顯示了!" << endl;
?? ?}
};
class IntelMemory :public Memory
{
public:
?? ?virtual void storage()
?? ?{
?? ??? ?cout << "Intel的內(nèi)存條開始存儲了!" << endl;
?? ?}
};
//Lenovo廠商
class LenovoCPU :public CPU
{
public:
?? ?virtual void calculate()
?? ?{
?? ??? ?cout << "Lenovo的CPU開始計算了!" << endl;
?? ?}
};
class LenovoVideoCard :public VideoCard
{
public:
?? ?virtual void display()
?? ?{
?? ??? ?cout << "Lenovo的顯卡開始顯示了!" << endl;
?? ?}
};
class LenovoMemory :public Memory
{
public:
?? ?virtual void storage()
?? ?{
?? ??? ?cout << "Lenovo的內(nèi)存條開始存儲了!" << endl;
?? ?}
};
void test01()
{
?? ?//第一臺電腦零件
?? ?CPU * intelCpu = new IntelCPU;
?? ?VideoCard * intelCard = new IntelVideoCard;
?? ?Memory * intelMem = new IntelMemory;
?? ?cout << "第一臺電腦開始工作:" << endl;
?? ?//創(chuàng)建第一臺電腦
?? ?Computer * computer1 = new Computer(intelCpu, intelCard, intelMem);
?? ?computer1->work();
?? ?delete computer1;
?? ?cout << "-----------------------" << endl;
?? ?cout << "第二臺電腦開始工作:" << endl;
?? ?//第二臺電腦組裝
?? ?Computer * computer2 = new Computer(new LenovoCPU, new LenovoVideoCard, new LenovoMemory);
?? ?computer2->work();
?? ?delete computer2;
?? ?cout << "-----------------------" << endl;
?? ?cout << "第三臺電腦開始工作:" << endl;
?? ?//第三臺電腦組裝
?? ?Computer * computer3 = new Computer(new LenovoCPU, new IntelVideoCard, new LenovoMemory);
?? ?computer3->work();
?? ?delete computer3;
}
int main()
{
?? ?test01();
?? ?system("pause");
?? ?return 0;
}文章來源地址http://www.zghlxwxcb.cn/news/detail-830121.html
到了這里,關(guān)于C++類和對象-多態(tài)->案例1計算器類、案例2制作飲品、案例3電腦組裝需求分析和電腦組裝具體實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!