Added TypeCastTest.cpp
This commit is contained in:
parent
3703fe7023
commit
29a275b573
@ -25,6 +25,9 @@ endmacro()
|
|||||||
add_executable(TypeSizeof datatype/TypeSizeof.cpp)
|
add_executable(TypeSizeof datatype/TypeSizeof.cpp)
|
||||||
CM_EXAMPLE_PROJECT("DataType" TypeSizeof)
|
CM_EXAMPLE_PROJECT("DataType" TypeSizeof)
|
||||||
|
|
||||||
|
add_executable(TypeCastTest datatype/TypeCastTest.cpp)
|
||||||
|
cm_example_project("DataType" TypeCastTest)
|
||||||
|
|
||||||
add_executable(HalfFloatTest datatype/HalfFloatTest.cpp)
|
add_executable(HalfFloatTest datatype/HalfFloatTest.cpp)
|
||||||
cm_example_project("DataType" HalfFloatTest)
|
cm_example_project("DataType" HalfFloatTest)
|
||||||
|
|
||||||
|
128
datatype/TypeCastTest.cpp
Normal file
128
datatype/TypeCastTest.cpp
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
#include<iostream>
|
||||||
|
|
||||||
|
static int BaseClassCount=0;
|
||||||
|
|
||||||
|
class BaseClass
|
||||||
|
{
|
||||||
|
int count;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
BaseClass()
|
||||||
|
{
|
||||||
|
count=BaseClassCount++;
|
||||||
|
std::cout<<"BaseClass "<<count<<std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~BaseClass()
|
||||||
|
{
|
||||||
|
std::cout<<"~BaseClass "<<count<<std::endl;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class SecondClassA:virtual public BaseClass
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
SecondClassA()
|
||||||
|
{
|
||||||
|
std::cout<<"SecondClassA"<<std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~SecondClassA()
|
||||||
|
{
|
||||||
|
std::cout<<"~SecondClassA"<<std::endl;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class SecondClassB:virtual public BaseClass
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
SecondClassB()
|
||||||
|
{
|
||||||
|
std::cout<<"SecondClassB"<<std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~SecondClassB()
|
||||||
|
{
|
||||||
|
std::cout<<"~SecondClassB"<<std::endl;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class ThirdClass:public SecondClassA,public SecondClassB
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
ThirdClass()
|
||||||
|
{
|
||||||
|
std::cout<<"ThirdClass"<<std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~ThirdClass()
|
||||||
|
{
|
||||||
|
std::cout<<"~ThirdClass"<<std::endl;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class SpecialClass:public SecondClassA
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
SpecialClass()
|
||||||
|
{
|
||||||
|
std::cout<<"SpecialClass"<<std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~SpecialClass()
|
||||||
|
{
|
||||||
|
std::cout<<"~SpecialClass"<<std::endl;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int main(int,char **)
|
||||||
|
{
|
||||||
|
ThirdClass tc;
|
||||||
|
|
||||||
|
BaseClass *bc=&tc;
|
||||||
|
|
||||||
|
SecondClassA *a_from_tc=(SecondClassA *)&tc;
|
||||||
|
SecondClassB *b_from_tc=(SecondClassB *)&tc;
|
||||||
|
|
||||||
|
SecondClassA *a_cast_tc=dynamic_cast<SecondClassA *>(&tc);
|
||||||
|
SecondClassB *b_cast_tc=dynamic_cast<SecondClassB *>(&tc);
|
||||||
|
|
||||||
|
SecondClassA *a_cast_bc=dynamic_cast<SecondClassA *>(bc);
|
||||||
|
SecondClassB *b_cast_bc=dynamic_cast<SecondClassB *>(bc);
|
||||||
|
|
||||||
|
SpecialClass sc;
|
||||||
|
BaseClass *sb=≻
|
||||||
|
|
||||||
|
SecondClassA *a_from_sc=dynamic_cast<SecondClassA *>(&sc);
|
||||||
|
SecondClassB *b_from_sc=dynamic_cast<SecondClassB *>(&sc);
|
||||||
|
|
||||||
|
SecondClassA *a_from_sb=dynamic_cast<SecondClassA *>(sb);
|
||||||
|
SecondClassB *b_from_sb=dynamic_cast<SecondClassB *>(sb);
|
||||||
|
|
||||||
|
std::cout<<"tc: "<<&tc<<std::endl;
|
||||||
|
|
||||||
|
std::cout<<"bc: "<<bc<<std::endl;
|
||||||
|
|
||||||
|
std::cout<<"a_from_tc: "<<a_from_tc<<std::endl;
|
||||||
|
std::cout<<"b_from_tc: "<<b_from_tc<<std::endl;
|
||||||
|
|
||||||
|
std::cout<<"a_cast_tc: "<<a_cast_tc<<std::endl;
|
||||||
|
std::cout<<"b_cast_tc: "<<b_cast_tc<<std::endl;
|
||||||
|
|
||||||
|
std::cout<<"a_cast_bc: "<<a_cast_bc<<std::endl;
|
||||||
|
std::cout<<"b_cast_bc: "<<b_cast_bc<<std::endl;
|
||||||
|
|
||||||
|
std::cout<<"sc: "<<&sc<<std::endl;
|
||||||
|
|
||||||
|
std::cout<<"a_from_sc: "<<a_from_sc<<std::endl;
|
||||||
|
std::cout<<"b_from_sc: "<<b_from_sc<<std::endl;
|
||||||
|
|
||||||
|
std::cout<<"a_from_sb: "<<a_from_sb<<std::endl;
|
||||||
|
std::cout<<"b_from_sb: "<<b_from_sb<<std::endl;
|
||||||
|
return 0;
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
#include<hgl/type/RectScope.h>
|
#include<hgl/type/RectScope.h>
|
||||||
#include<hgl/graph/Triangle.h>
|
#include<hgl/graph/Triangle.h>
|
||||||
|
#include<hgl/graph/Ray.h>
|
||||||
#include<hgl/2d/TGA.h>
|
#include<hgl/2d/TGA.h>
|
||||||
#include<hgl/2d/Bitmap.h>
|
#include<hgl/2d/Bitmap.h>
|
||||||
#include<hgl/2d/BitmapSave.h>
|
#include<hgl/2d/BitmapSave.h>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user