网易云课堂_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;
}
原文地址:https://www.cnblogs.com/denggelin/p/6204680.html