Я пытался сделать пример кода для преобразования типов между объектами, только после того, что показано here.Оператор литья типа не называется
Это родительский класс
// ParentClass.h
class ParentClass {
public:
ParentClass();
virtual ~ParentClass();
};
подмигнули лишь некоторые концепции доказательства, единственное, что он делает что-то печать
#include <iostream>
#include "ParentClass.h"
ParentClass::ParentClass()
{
std::cout << "Parent\tDefault constructor\n";
}
ParentClass::~ParentClass()
{
std::cout << "Parent\tDestructor\n";
}
И затем, производный класс
// ChildClass.h
#include "ParentClass.h"
class ChildClass: public ParentClass {
public:
ChildClass();
// conversion constructor
ChildClass(const ParentClass& p);
// conversion from assignment
ChildClass& operator= (const ParentClass & p);
// type-cast operator
operator ParentClass();
// destructor
virtual ~ChildClass();
};
А затем, код, также довольно глупый
// ChildClass.cpp
#include <iostream>
#include "ChildClass.h"
ChildClass::ChildClass()
{
std::cout << "Child\tDefault constructor\n";
}
ChildClass::~ChildClass()
{
std::cout << "Child\tDestructor\n";
}
// conversion constructor
ChildClass::ChildClass(const ParentClass& p)
{
std::cout << "Child\tConversion constructor\n";
}
// assignment operator
ChildClass& ChildClass::operator= (const ParentClass & p)
{
std::cout << "Child\toperator= conversion\n";
return *this;
}
// type-cast operator
ChildClass::operator ParentClass()
{
std::cout << "Child\toperatorParentClass()\n";
return ParentClass();
}
Затем я сделать некоторые преобразования в моей основной функции
std::cout << "calls Parent default constructor\n";
ParentClass foo;
std::cout << "calls Parent to child constructor\n";
ChildClass bar = foo;
std::cout << "calls assignment operator from child\n";
bar = foo;
std::cout << "calls Child type-cast operator\n";
foo = bar;
std::cout << "Exit\n";
Но когда я запускаю этот код не вводя оператор приведения типа из производного класса, он просто печатает это:
calls Parent default constructor
Parent Default constructor
calls Parent to child constructor
Parent Default constructor
Child Conversion constructor
calls assignment operator from child
Child operator= conversion
calls Child type-cast operator
Exit
Child Destructor
Parent Destructor
Parent Destructor
Я затрудняюсь по этому поводу, так как я пробовал код в приведенной выше ссылке, и он работал так, как должен.
О, да, я вижу, я добавил это наследование, которое не было на исходном коде. Я просматривал оба кода для различий и всегда упускал из виду, что: / –