{"id":901,"date":"2011-09-06T15:59:26","date_gmt":"2011-09-06T14:59:26","guid":{"rendered":"http:\/\/roboblog.fatal-fury.de\/?p=901"},"modified":"2012-08-05T13:22:09","modified_gmt":"2012-08-05T12:22:09","slug":"example-to-change-the-base-instance-of-a-derived-object","status":"publish","type":"post","link":"http:\/\/roboblog.fatal-fury.de\/?p=901","title":{"rendered":"example to change the base instance of a derived object"},"content":{"rendered":"<p>Man hat ein Array von Objekten einer abgeleiteten Klasse.<br \/>\nDa new[] nur den Default Konstruktor aufruft, kann man keine schon existierende Instanz der Basisklasse mitgeben.<br \/>\nFolgender Code zeigt, wie man die Basisinstnaz nachtr\u00e4glich \u00e4ndern kann.<\/p>\n<p><code><br \/>\n\/\/ example to change the base instance of a derived object<br \/>\n#include < iostream ><br \/>\nusing namespace std;<\/p>\n<p>class rawData<br \/>\n{<br \/>\npublic:<br \/>\n    double x;<br \/>\n};<\/p>\n<p>class extendedData : public rawData<br \/>\n{<br \/>\npublic:<br \/>\n    int a;<br \/>\n};<\/p>\n<p>int main ()<br \/>\n{<br \/>\n    rawData *knoten = new rawData[2];<br \/>\n    knoten[0].x = 0;<\/p>\n<p>    extendedData *knotenext = new extendedData[2];<br \/>\n    knotenext[0].x = 1;<br \/>\n    knotenext[0].a = 10;<\/p>\n<p>    cout << knotenext[0].x << endl;\n    cout << knotenext[0].a << endl;\n\n    \/\/ do the magic\n    rawData *base = &knotenext[0];\n    *base  = knoten[0];\n\n    cout << knotenext[0].x << endl;\n    cout << knotenext[0].a << endl;\n\n    delete[] knoten;\n    delete[] knotenext;\n\n    return 0;\n}\n<\/code><\/p>\n<p>Ausgabe:<\/p>\n<blockquote><p>1<br \/>\n10<br \/>\n0<br \/>\n10\n<\/p><\/blockquote>\n<p>Valgrind:<\/p>\n<blockquote><p>kater@mintux:~$ valgrind .\/a.out --leak-check=full<br \/>\n==7218== Memcheck, a memory error detector.<br \/>\n==7218== Copyright (C) 2002-2007, and GNU GPL'd, by Julian Seward et al.<br \/>\n==7218== Using LibVEX rev 1854, a library for dynamic binary translation.<br \/>\n==7218== Copyright (C) 2004-2007, and GNU GPL'd, by OpenWorks LLP.<br \/>\n==7218== Using valgrind-3.3.1-Debian, a dynamic binary instrumentation framework.<br \/>\n==7218== Copyright (C) 2000-2007, and GNU GPL'd, by Julian Seward et al.<br \/>\n==7218== For more details, rerun with: -v<br \/>\n==7218==<br \/>\n1<br \/>\n10<br \/>\n0<br \/>\n10<br \/>\n==7218==<br \/>\n==7218== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 18 from 1)<br \/>\n==7218== malloc\/free: in use at exit: 0 bytes in 0 blocks.<br \/>\n==7218== malloc\/free: 2 allocs, 2 frees, 40 bytes allocated.<br \/>\n==7218== For counts of detected errors, rerun with: -v<br \/>\n==7218== All heap blocks were freed -- no leaks are possible.\n<\/p><\/blockquote>\n<p>Eigentlich h\u00e4tte ich erwartet, dass man das alte Basisobjekt noch l\u00f6schen muss. Aber anscheinend nicht :)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Man hat ein Array von Objekten einer abgeleiteten Klasse. Da new[] nur den Default Konstruktor aufruft, kann man keine schon existierende Instanz der Basisklasse mitgeben. Folgender Code zeigt, wie man die Basisinstnaz nachtr\u00e4glich \u00e4ndern kann. \/\/ example to change the base instance of a derived object #include < iostream > using namespace std; class rawData [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[14,17,33],"class_list":["post-901","post","type-post","status-publish","format-standard","hentry","category-allgemein","tag-c","tag-cpp","tag-tuning"],"_links":{"self":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/901","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=901"}],"version-history":[{"count":5,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/901\/revisions"}],"predecessor-version":[{"id":1528,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=\/wp\/v2\/posts\/901\/revisions\/1528"}],"wp:attachment":[{"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=901"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=901"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/roboblog.fatal-fury.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=901"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}