#include <iostream>
#include <typeinfo>

class Hond {
public:
	virtual ~Hond() {
	}
	virtual void blaf() const {
		std::cout<<"Blaf."<<std::endl;
	}
// ...
};

class SintBernard: public Hond {
public:
	SintBernard(int w=10): whisky(w) {
	}
	virtual void blaf() const {
		std::cout<<"Woef!"<<std::endl;
	}
	int geefDrank() {
		std::cout<<"Geeft drank."<<std::endl;
		int i(whisky);
		whisky=0;
		return i;
	};
// ...
private:
	int whisky;
};

void geefHulp(Hond& hr) {
	hr.blaf();
	try {
		SintBernard& sbr(dynamic_cast<SintBernard&>(hr));
		std::cout<<sbr.geefDrank()<<" liter."<<std::endl;
	} catch (std::bad_cast) {
		/* doe niets */
	}
}

int main() {
	SintBernard boris;
	geefHulp(boris);
	std::cin.get();
	Hond h;
	geefHulp(h);
	std::cin.get();
	return 0;
}

/*
Output:

Woef!
Geeft drank.
10 liter.

Blaf.

*/
