#include <iostream>
#include <vector>
using namespace std;
class Foo
{
public:
Foo(int things, float place) : m_thingList(things)
{
std::cout << "in Foo ctor" << std::endl;
validatePlacePriorToAssignment(place);
}
virtual ~Foo() {}
private:
int m_thingList;
float m_validatedPlace;
void validatePlacePriorToAssignment(float p)
{
// do stuff to validate place; if not valid, throw exception
// else
m_validatedPlace = p;
}
};
class Bar : public Foo
{
public:
const float defaultPlace = 0.5;
Bar(int stuff) : Foo(stuff, defaultPlace)
{
std::cout << "in Bar ctor" << std::endl;
}
};
int main()
{
int allTheThings;
try { Bar bar(allTheThings); }
catch (...) { std::cout << "saddness" << std::endl; }
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgRm9vCnsKcHVibGljOgoJRm9vKGludCB0aGluZ3MsIGZsb2F0IHBsYWNlKSA6IG1fdGhpbmdMaXN0KHRoaW5ncykKCXsKCQlzdGQ6OmNvdXQgPDwgImluIEZvbyBjdG9yIiA8PCBzdGQ6OmVuZGw7CgkJdmFsaWRhdGVQbGFjZVByaW9yVG9Bc3NpZ25tZW50KHBsYWNlKTsKCX0KCQoJdmlydHVhbCB+Rm9vKCkge30KCQpwcml2YXRlOgoJaW50IG1fdGhpbmdMaXN0OwoJZmxvYXQgbV92YWxpZGF0ZWRQbGFjZTsKCQoJdm9pZCB2YWxpZGF0ZVBsYWNlUHJpb3JUb0Fzc2lnbm1lbnQoZmxvYXQgcCkKCXsKCQkvLyBkbyBzdHVmZiB0byB2YWxpZGF0ZSBwbGFjZTsgaWYgbm90IHZhbGlkLCB0aHJvdyBleGNlcHRpb24KCQkvLyBlbHNlCgkJbV92YWxpZGF0ZWRQbGFjZSA9IHA7Cgl9Cn07CgpjbGFzcyBCYXIgOiBwdWJsaWMgRm9vCnsKcHVibGljOgoJY29uc3QgZmxvYXQgZGVmYXVsdFBsYWNlID0gMC41OwoJQmFyKGludCBzdHVmZikgOiBGb28oc3R1ZmYsIGRlZmF1bHRQbGFjZSkKCXsKCQlzdGQ6OmNvdXQgPDwgImluIEJhciBjdG9yIiA8PCBzdGQ6OmVuZGw7Cgl9Cn07CgppbnQgbWFpbigpCnsKCWludCBhbGxUaGVUaGluZ3M7CgkKCXRyeSB7IEJhciBiYXIoYWxsVGhlVGhpbmdzKTsgfQoJY2F0Y2ggKC4uLikgeyBzdGQ6OmNvdXQgPDwgInNhZGRuZXNzIiA8PCBzdGQ6OmVuZGw7IH0KCQoJcmV0dXJuIDA7Cn0=