Пожалуйста, объясните, почему конструктор no вызывается для derived2 в первой программе. 2-Я программа не компилируется.
1)ниже программа работает, но никакой конструктор не вызывается для derived2.
#include<iostream> using namespace std ; class drived1; #define SIZE 10 class base { public: int a; drived1* get_value_object_drived1(); base() { cout << "Base Ctor" << endl; } }; drived1* base::get_value_object_drived1() { a = 20; return reinterpret_cast<drived1*>((this)); } class drived1: public base { public: int b; void displayD1() { cout << "drived1 displayD1 is called" << endl; b = 10; } drived1() { cout << "drived1 Ctor" << endl; b = 5; } }; class drived2: public base { public: int d_buff[SIZE]; drived2() { cout << "drived2 Ctor" << endl; } }; void main() { base B; drived2 D2; D2.get_value_object_drived1()->displayD1(); }
Но ниже один не работает при возврате объекта вместо указателя.
#include<iostream> using namespace std ; class drived1; #define SIZE 10 class base { public: int a; drived1 get_value_object_drived1(); base() { cout << "Base Ctor" << endl; } }; drived1 base::get_value_object_drived1() { a = 20; return reinterpret_cast<drived1>((*this)); } class drived1: public base { public: int b; void displayD1() { cout << "drived1 displayD1 is called" << endl; b = 10; } drived1() { cout << "drived1 Ctor" << endl; b = 5; } }; class drived2: public base { public: int d_buff[SIZE]; drived2() { cout << "drived2 Ctor" << endl; } }; void main() { base B; drived2 D2; D2.get_value_object_drived1().displayD1(); }
Что я уже пробовал:
1)Первая программа работает, но никакой конструктор не вызывается для derived2. Почему конструктор не вызывается для derived2.
2)но 2-Я программа не работает при возврате объекта вместо указателя того же типа.