Archives
D Programming
DD.gnu digitalmars.D digitalmars.D.bugs digitalmars.D.dtl digitalmars.D.dwt digitalmars.D.announce digitalmars.D.learn digitalmars.D.debugger C/C++ Programming
c++c++.announce c++.atl c++.beta c++.chat c++.command-line c++.dos c++.dos.16-bits c++.dos.32-bits c++.idde c++.mfc c++.rtl c++.stl c++.stl.hp c++.stl.port c++.stl.sgi c++.stlsoft c++.windows c++.windows.16-bits c++.windows.32-bits c++.wxwindows digitalmars.empire digitalmars.DMDScript |
c++ - Type cast to subclass
Sample code: /* subcast.cpp */ #include <memory.h> #include <iostream.h> class Matrix { protected: int v[3][3]; public: Matrix() { cerr << "Matrix::ctor()" << endl; }; Matrix(const Matrix &m) { cerr << "Matrix::ctor(const Matrix &)" << endl; memcpy(v, m.v, sizeof(v)); }; }; class SquareMatrix: public Matrix { private: int det; public: SquareMatrix(): Matrix() { cerr << "SquareMatrix::ctor()" << endl; det = 0; }; SquareMatrix(const SquareMatrix &m): Matrix(m) { cerr << "SquareMatrix::ctor(const SquareMatrix &)" << endl; det = m.det; }; }; int main() { Matrix m1; SquareMatrix m2((SquareMatrix)m1); return 0; } This compiles ok and runs ok giving on stderr: Matrix::ctor() Matrix::ctor(const Matrix &) SquareMatrix::ctor(const SquareMatrix &) This mean that only two objects constructed: m1 of type Matrix (first output line) and m2 of type SquareMatrix (second and third output lines). So the question: How the compiler converts object of class Matrix to objects of its subclass SquareMatrix without creating any objects? This sample code gives compile-time error about unability to convert from Matrix to SquareMatrix while compiled by g++ and KAI C++. Sep 23 2002
That's a bug. I'll fix it in the next patch. Sep 23 2002
|