Inne artykuły
Zmiana kolejności wywołania konstruktorów i destruktorów
[artykuł] Artykuł pokazuje jak zmienić kolejność wywołania konstruktorów i destruktorów.Niniejszy artykuł pokazuje jak sprawić by konstruktor klasy dziedziczonej wywoływał się po utworzeniu obiektów klasy potomnej.
Kod przed zmianami
#include <cstdio>
#include <string>
class CTalk
{
std::string m_x;
public:
CTalk( const char * x )
: m_x( x )
{ printf( "CTalk(%s)\n", m_x.c_str() ); }
~CTalk() { printf( "~CTalk(\"%s\")\n", m_x.c_str() ); }
};
class CTest
: public CTalk
{
CTalk t1;
CTalk t2;
public:
CTest()
: CTalk( "inherited" )
, t1( "t1" )
, t2( "t2" )
{ };
};
int main() {
CTest test;
return 0;
}
Standardowe wyjście programu:
CTalk(inherited)
CTalk(t1)
CTalk(t2)
~CTalk("t2")
~CTalk("t1")
~CTalk("inherited")
Kod po zmianach
#include <cstdio>
#include <string>
class CTalk
{
std::string m_x;
public:
CTalk( const char * x )
: m_x( x )
{ printf( "CTalk(%s)\n", m_x.c_str() ); }
~CTalk() { printf( "~CTalk(\"%s\")\n", m_x.c_str() ); }
};
struct CT12 {
CT12( const char * t1s, const char * t2s )
: t1( t1s )
, t2( t2s )
{ }
CTalk t1;
CTalk t2;
};
class CTest
: private CT12
, public CTalk
{
public:
CTest()
: CT12( "t1", "t2" )
, CTalk( "inherited" )
{ };
};
int main() {
CTest test;
return 0;
}
Standardowe wyjście programu:
CTalk(t1)
CTalk(t2)
CTalk(inherited)
~CTalk("inherited")
~CTalk("t2")
~CTalk("t1")
Wszystkie teksty są chronione prawami autorskimi. Kopiowanie lub rozpowszechnianie treści poza niniejszym serwisem
jest zabronione.
Powyższe ograniczenie nie dotyczy autora opracowania, któremu przysługuje prawo do rozpowszechniania własnego tekstu wedle własnego uznania.