#include <iostream>
class Geometry {
private:
float fRadius;
int iSegments;
float fWidth;
float fLenght;
std::string stdstrType;
bool bValid;
public:
Geometry() {
// Set data Elements
std::cout << "Constructor 1 is called\n";
}
Geometry(float Radius, int Segments, float Width, float Length,
std::string strType, bool bValue) {
// Set data Elements
std::cout << "Constructor 2 is called\n";
}
Geometry(const Geometry & g) {
// Set data Elements
std::cout << "Constructor 3 is called\n";
}
};
class Container {
private:
std::string stdstrContainerName;
std::string stdstrPluginType;
Geometry Geom;
public:
Container(std::string, std::string, Geometry geometry);
};
Container::Container(std::string strName, std::string strType,
Geometry geometry) {
stdstrContainerName = stdstrContainerName;
stdstrPluginType = stdstrPluginType;
Geom = geometry;
}
class ContainerWithMemberInit {
private:
std::string stdstrContainerName;
std::string stdstrPluginType;
Geometry Geom;
public:
ContainerWithMemberInit(std::string, std::string, Geometry geometry);
};
ContainerWithMemberInit::ContainerWithMemberInit(std::string strName, std::string strType, Geometry geometry)
: stdstrContainerName(strName)
, stdstrPluginType(strType)
, Geom(geometry) // copy-constructor, i.e. Geometry(Geometry const&)
{
}
int main() {
{
Geometry geometry(0.3, 32, 0.0, 0.0, "SPHERE", true);
// Constructor 2 is called
Container cont("Sphere", "SPHERE", geometry);
// Constructor 3 is called
// Constructor 1 is called
}
std::cout << "break\n";
{
Geometry geometry(0.3, 32, 0.0, 0.0, "SPHERE", true);
// Constructor 2 is called
ContainerWithMemberInit cont("Sphere", "SPHERE", geometry);
// Constructor 3 is called
// Constructor 3 is called
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgR2VvbWV0cnkgewpwcml2YXRlOgogIGZsb2F0IGZSYWRpdXM7CiAgaW50IGlTZWdtZW50czsKICBmbG9hdCBmV2lkdGg7CiAgZmxvYXQgZkxlbmdodDsKICBzdGQ6OnN0cmluZyBzdGRzdHJUeXBlOwogIGJvb2wgYlZhbGlkOwoKcHVibGljOgogIEdlb21ldHJ5KCkgewogICAgLy8gU2V0IGRhdGEgRWxlbWVudHMKICAgIHN0ZDo6Y291dCA8PCAiQ29uc3RydWN0b3IgMSBpcyBjYWxsZWRcbiI7CiAgfQoKICBHZW9tZXRyeShmbG9hdCBSYWRpdXMsIGludCBTZWdtZW50cywgZmxvYXQgV2lkdGgsIGZsb2F0IExlbmd0aCwKICAgIHN0ZDo6c3RyaW5nIHN0clR5cGUsIGJvb2wgYlZhbHVlKSB7CiAgICAvLyBTZXQgZGF0YSBFbGVtZW50cwogICAgc3RkOjpjb3V0IDw8ICJDb25zdHJ1Y3RvciAyIGlzIGNhbGxlZFxuIjsKICB9CgogIEdlb21ldHJ5KGNvbnN0IEdlb21ldHJ5ICYgZykgewogICAgLy8gU2V0IGRhdGEgRWxlbWVudHMKICAgIHN0ZDo6Y291dCA8PCAiQ29uc3RydWN0b3IgMyBpcyBjYWxsZWRcbiI7CiAgfQp9OwoKY2xhc3MgQ29udGFpbmVyIHsKcHJpdmF0ZToKICBzdGQ6OnN0cmluZyBzdGRzdHJDb250YWluZXJOYW1lOwogIHN0ZDo6c3RyaW5nIHN0ZHN0clBsdWdpblR5cGU7CiAgR2VvbWV0cnkgR2VvbTsKCnB1YmxpYzoKICBDb250YWluZXIoc3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nLCBHZW9tZXRyeSBnZW9tZXRyeSk7Cn07CgpDb250YWluZXI6OkNvbnRhaW5lcihzdGQ6OnN0cmluZyBzdHJOYW1lLCBzdGQ6OnN0cmluZyBzdHJUeXBlLAogIEdlb21ldHJ5IGdlb21ldHJ5KSB7CiAgc3Rkc3RyQ29udGFpbmVyTmFtZSA9IHN0ZHN0ckNvbnRhaW5lck5hbWU7CiAgc3Rkc3RyUGx1Z2luVHlwZSA9IHN0ZHN0clBsdWdpblR5cGU7CiAgR2VvbSA9IGdlb21ldHJ5Owp9CgpjbGFzcyBDb250YWluZXJXaXRoTWVtYmVySW5pdCB7CnByaXZhdGU6CiAgc3RkOjpzdHJpbmcgc3Rkc3RyQ29udGFpbmVyTmFtZTsKICBzdGQ6OnN0cmluZyBzdGRzdHJQbHVnaW5UeXBlOwogIEdlb21ldHJ5IEdlb207CgpwdWJsaWM6CiAgQ29udGFpbmVyV2l0aE1lbWJlckluaXQoc3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nLCBHZW9tZXRyeSBnZW9tZXRyeSk7Cn07CgpDb250YWluZXJXaXRoTWVtYmVySW5pdDo6Q29udGFpbmVyV2l0aE1lbWJlckluaXQoc3RkOjpzdHJpbmcgc3RyTmFtZSwgc3RkOjpzdHJpbmcgc3RyVHlwZSwgR2VvbWV0cnkgZ2VvbWV0cnkpCiAgOiBzdGRzdHJDb250YWluZXJOYW1lKHN0ck5hbWUpCiAgLCBzdGRzdHJQbHVnaW5UeXBlKHN0clR5cGUpCiAgLCBHZW9tKGdlb21ldHJ5KSAgICAgICAgICAgIC8vIGNvcHktY29uc3RydWN0b3IsIGkuZS4gR2VvbWV0cnkoR2VvbWV0cnkgY29uc3QmKSAgICAKewp9CgppbnQgbWFpbigpIHsKCXsKCQlHZW9tZXRyeSBnZW9tZXRyeSgwLjMsIDMyLCAwLjAsIDAuMCwgIlNQSEVSRSIsIHRydWUpOwoJCS8vIENvbnN0cnVjdG9yIDIgaXMgY2FsbGVkCgkJQ29udGFpbmVyIGNvbnQoIlNwaGVyZSIsICJTUEhFUkUiLCBnZW9tZXRyeSk7CgkJLy8gQ29uc3RydWN0b3IgMyBpcyBjYWxsZWQKCQkvLyBDb25zdHJ1Y3RvciAxIGlzIGNhbGxlZAoJfQoJc3RkOjpjb3V0IDw8ICJicmVha1xuIjsKCXsKCQlHZW9tZXRyeSBnZW9tZXRyeSgwLjMsIDMyLCAwLjAsIDAuMCwgIlNQSEVSRSIsIHRydWUpOwoJCS8vIENvbnN0cnVjdG9yIDIgaXMgY2FsbGVkCgkJQ29udGFpbmVyV2l0aE1lbWJlckluaXQgY29udCgiU3BoZXJlIiwgIlNQSEVSRSIsIGdlb21ldHJ5KTsKCQkvLyBDb25zdHJ1Y3RvciAzIGlzIGNhbGxlZAoJCS8vIENvbnN0cnVjdG9yIDMgaXMgY2FsbGVkCgl9Cn0KCg==