• 网易云课堂_C++开发入门到精通_章节6:多态


    课时33示例--为多态基类声明虚析构函数

    微软校园招聘笔试题

    #include <iostream>
    
    class Base
    {
    public:
    	char Value()
    	{
    		return 'A';
    	}
    
    	virtual char VirtualValue()
    	{
    		return 'X';
    	}
    };
    
    class Derived :public Base
    {
    public:
    	char Value()
    	{
    		return 'U';
    	}
    };
    
    class VirtualDerived :virtual public Base
    {
    public:
    	char Value()
    	{
    		return 'Z';
    	}
    
    	char VirtualValue()
    	{
    		return 'V';
    	}
    };
    
    int main()
    {
    	Base *p1 = new Derived();
    	Base *p2 = new VirtualDerived();
    
    	std::cout << p1->Value() << " " <<
    		p1->VirtualValue() << " " <<
    		p2->Value() << " " <<
    		p2->VirtualValue() << std::endl;
    
    	system("pause");
    
    	return 0;
    }
    

    A X A V
    请按任意键继续. . .

    课时34案例讲解--简单工厂

    案例讲解

    简单工厂

    案例介绍

    模拟种植园管理程序

    种植园里种苹果、葡萄等水果

    案例设计

    使用简单工厂模式实现开闭原则

    #include <iostream>
    
    enum
    {
    	APPLE = 0,
    	GRAPE = 1
    };
    
    class Fruit
    {
    public:
    	virtual ~Fruit() = 0;
    
    	virtual void plant() = 0;
    	virtual void grow() = 0;
    	virtual void harvest() = 0;
    };
    
    class Apple :public Fruit
    {
    public:
    	Apple();
    	~Apple();
    
    	virtual void plant();
    	virtual void grow();
    	virtual void harvest();
    };
    
    class Grape :public Fruit
    {
    public:
    	Grape();
    	~Grape();
    
    	virtual void plant();
    	virtual void grow();
    	virtual void harvest();
    };
    
    class Gardener
    {
    public:
    	Gardener();
    	~Gardener();
    
    	Fruit* getFruit(int type);
    
    private:
    	Apple* apple;
    	Grape* grape;
    };
    
    Fruit::~Fruit()
    {
    
    }
    
    Apple::Apple()
    {
    	std::cout << "apple constructing" << std::endl;
    }
    
    Apple::~Apple()
    {
    	std::cout << "apple destructing" << std::endl;
    }
    
    void Apple::plant()
    {
    	std::cout << "apple plant" << std::endl;
    }
    
    void Apple::grow()
    {
    	std::cout << "apple grow" << std::endl;
    }
    
    void Apple::harvest()
    {
    	std::cout << "apple harvest" << std::endl;
    }
    
    Grape::Grape()
    {
    	std::cout << "grape constructing" << std::endl;
    }
    
    Grape::~Grape()
    {
    	std::cout << "grape destructing" << std::endl;
    }
    
    void Grape::plant()
    {
    	std::cout << "grape plant" << std::endl;
    }
    
    void Grape::grow()
    {
    	std::cout << "grape grow" << std::endl;
    }
    
    void Grape::harvest()
    {
    	std::cout << "grape harvest" << std::endl;
    }
    
    Gardener::Gardener()
    {
    	apple = nullptr;
    	grape = nullptr;
    }
    
    Gardener::~Gardener()
    {
    
    }
    
    Fruit* Gardener::getFruit(int type)
    {
    	Fruit *fruit = nullptr;
    
    	if (APPLE == type)
    	{
    		if (nullptr == apple)
    		{
    			apple = new Apple();
    		}
    		
    		fruit = apple;
    	}
    	else if (GRAPE == type)
    	{
    		if (nullptr == grape)
    		{
    			grape = new Grape();
    		}
    
    		fruit = grape;
    	}
    	else
    	{
    
    	}
    
    	return fruit;
    }
    
    int main()
    {
    	Gardener tom;
    
    	Fruit* fruit = tom.getFruit(APPLE);
    
    	fruit->plant();
    	fruit->grow();
    	fruit->harvest();
    
    	system("pause");
    
    	return 0;
    }
    
  • 相关阅读:
    hdu 3371 Connect the Cities
    hust 1102 Constructing Roads
    hdu 1856 More is better
    hdu 1325 Is It A Tree?
    poj 2828 Buy Tickets (线段树)
    sdut 2351 In Danger (找规律)
    poj 2528 Mayor's posters(线段树)
    poj 2352 Stars (树状数组)
    poj 2492 A Bug's Life (并查集)
    poj 1703 Find them, Catch them(并查集)
  • 原文地址:https://www.cnblogs.com/denggelin/p/6204680.html
Copyright © 2020-2023  润新知