Added TypeCastTest.cpp

This commit is contained in:
hyzboy 2024-08-07 02:04:34 +08:00
parent 3703fe7023
commit 29a275b573
3 changed files with 132 additions and 0 deletions

View File

@ -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
View 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=&sc;
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;
}

View File

@ -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>