c++ - Type cast to subclass
- Iliya Peregoudov (44/44) Sep 23 2002 Sample code:
- Walter (1/1) Sep 23 2002 That's a bug. I'll fix it in the next patch.
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