There are two ways to convert the objects between two different class types.
- Define a constructor in the target class, which takes an argument from the source class type:
class source; // forward declarationclass target{ public : target():m_str("WebSite") {} target (const source& src); string m_str;};class source{ public: source () : m_ch(new char[5]) { strcpy (m_ch, "DevX"); } char* m_ch;};target ::target (const source& src) : m_str(src.m_ch){}int main (){ source s; target t; cout << t.m_str << ' '; t = s; //assigning target t_1 = s; //initializing cout << s.m_ch << ' '; cout << t.m_str << ' '; cout << t_1.m_str << ' '; return 0;}
- Define a conversion function of the target class type in the source class. Don't define both, because doing so causes ambiguity for the compiler.
class target{ public: public : target():m_str("WebSite") {} target (const char* ch ) : m_str(ch) {} string m_str;};class source{ public: source () : m_ch(new char[5]) { strcpy (m_ch, "DevX"); } operator target () { return target (m_ch); } char* m_ch;};int main (){ source s; target t; cout << t.m_str << ' '; t = s; //assigning target t_1 = s; //initializing cout << s.m_ch << ' '; cout << t.m_str << ' '; cout << t_1.m_str << ' '; return 0; return 0;}