#include <iostream>
class Base {
public:
virtual void func1() {
std::cout << "Base::func1()" << std::endl;
}
virtual void func2() {
std::cout << "Base::func2()" << std::endl;
}
void func3() {
std::cout << "Base::func3()" << std::endl;
}
};
class Derived : public Base {
void func1() override {
std::cout << "Derived::func1()" << std::endl;
}
void func3() {
std::cout << "Derived::func2()" << std::endl;
}
void func4() {
std::cout << "Derived::func4()" << std::endl;
}
};
int main()
{
Base b;
Derived d;
Base* bptr = new Derived();
bptr->func1();
bptr->func2();
bptr->func3();
delete bptr;
bptr = &b;
bptr->func1();
bptr->func2();
bptr->func3();
return 0
}
#include <iostream>
class Cinterface {
public:
Cinterface() {
std::cout << "CInterface Constructor call\n" << std::endl;
}
virtual void getData() const = 0;
};
class CinSub : public Cinterface {
public:
CinSub() {
std::cout << "CinSub Constructor call\n" << std::endl;
}
void getData() const override {
std::cout << "Pure Virtual function()" << std::endl;
}
};
int main()
{
CinSub obj;
std::cout << "+++++++++++++++++++++++++++++++" << std::endl;
obj.getData();
return 0;
}
#include <iostream>
class CTest {
private:
int num;
public:
CTest(int anum) : num(anum) {
std::cout << num << ", " << "CTest Constructor call" << std::endl;
}
virtual ~CTest() {
std::cout << num << ", " << "CTest Destructor call" << std::endl;
}
virtual void vfunc() {
std::cout << "CTest virtual function()" << std::endl;
}
void func() {
std::cout << "CTest function()" << std::endl;
}
};
class CTestSub : public CTest {
private:
int subN;
public:
CTestSub(int n1, int n2) : CTest(n1), subN(n2) {
std::cout << subN << ", " << "CTestSub Constructor call" << std::endl;
}
~CTestSub() {
std::cout << "+++++++++++++++++++++++++++++++++++++++++" << std::endl;
std::cout << subN << ", " << "CTestSub Destructor call" << std::endl;
}
void vfunc() override {
std::cout << "CTestSub function() override" << std::endl;
}
};
int main()
{
CTest obj(1);
std::cout << "+++++++++++++++++++++++++++++++++++++++++" << std::endl;
CTestSub obj2(2, 22);
std::cout << "+++++++++++++++++++++++++++++++++++++++++" << std::endl;
obj.func();
obj.vfunc();
std::cout << "+++++++++++++++++++++++++++++++++++++++++" << std::endl;
obj2.func();
obj2.vfunc();
std::cout << "+++++++++++++++++++++++++++++++++++++++++" << std::endl;
CTest* ptr = new CTestSub(3, 33);
delete ptr;
return 0;
}