add virtual methods

add interface
add pure virtual
add casts
add template example
This commit is contained in:
2025-02-12 16:51:05 +01:00
parent a0b1dd4c08
commit 0e140ba81f
9 changed files with 97 additions and 3 deletions
+32 -2
View File
@@ -3,6 +3,7 @@
#include <memory>
#include "functions.h"
#include "ClassA.h"
#include "ClassB.h"
using namespace std;
@@ -107,8 +108,37 @@ int main()
//}
//cout << "sn2 refs: " << sn2.use_count() << endl;
ClassA classA;
ClassA classA2 = classA;
//ClassA classA;
//ClassA classA2 = classA;
//ClassB classB;
//int n = classA.GetNumber();
//cout << n << endl;
//classB.GetNumber();
IPrintable* pPrintable = nullptr;
pPrintable = new ClassB();
//(*pPrintable).Print();
//pPrintable->Print(); // same line as above, but simpler
////ClassB* pClassB2 = (ClassB*)pPrintable; // C-Cast, CAUTION: DANGER!!!
//ClassB* pClassB2 = dynamic_cast<ClassB*>(pPrintable); // c++ cast for polymorhpic cast
//float f = 1.0f;
//int i = static_cast<int>(f); // c++ cast, convert one static data type into another
////int* nonsense = reinterpret_cast<int*>(pPrintable); // c++ cast like C-Cast, CAUTION: DANGER!!!
//const char csz[13] = "Hello World";
//char* sz = const_cast<char*>(csz);
// What's the difference?
//const int* cip;
//int const* icp;
//int* const ipc;
//const int const* cicp;
//const int* const cipc;
//int const* const icpc;
//const int const* const cicpc;
//delete pPrintable;
//pPrintable = nullptr;
safeDelete(pPrintable);
return 0;
}