Added TypeCastTest.cpp
This commit is contained in:
parent
3703fe7023
commit
29a275b573
@ -25,6 +25,9 @@ endmacro()
|
||||
add_executable(TypeSizeof datatype/TypeSizeof.cpp)
|
||||
CM_EXAMPLE_PROJECT("DataType" TypeSizeof)
|
||||
|
||||
add_executable(TypeCastTest datatype/TypeCastTest.cpp)
|
||||
cm_example_project("DataType" TypeCastTest)
|
||||
|
||||
add_executable(HalfFloatTest datatype/HalfFloatTest.cpp)
|
||||
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/graph/Triangle.h>
|
||||
#include<hgl/graph/Ray.h>
|
||||
#include<hgl/2d/TGA.h>
|
||||
#include<hgl/2d/Bitmap.h>
|
||||
#include<hgl/2d/BitmapSave.h>
|
||||
|
Loading…
x
Reference in New Issue
Block a user