Alternative to Abtract Class?
I want to know. Is first version of abtract class the same as second
version of class with protected constructor() and destructor()? Here
is an example. You can't use class A so class B is used to derive
from class A. Also, you can't use class A2 with protected constructor
() so class B2 is used to derive from class A2.
#include <iostream>
using std::cout;
using std::endl;
class A
{
public:
A() : m_x(0) { cout << "Constructor A" << endl; }
~A() { cout << "Destructor A" << endl; }
void set(int x) { m_x = x; }
int get() { return m_x; }
virtual void print() = 0;
private:
int m_x;
};
class B : public A
{
public:
B() : A() { cout << "Constructor B" << endl; }
~B() { cout << "Constructor B" << endl; }
void print() { cout << "m_x: " << get() << endl; }
};
class A2
{
protected:
A2() : m_x(0) { cout << "Constructor A2" << endl; }
~A2() { cout << "Destructor A2" << endl; }
int m_x;
};
class B2 : public A2
{
public:
B2() : A2() { cout << "Constructor B2" << endl; }
~B2() { cout << "Destructor B2" << endl; }
void set(int x) { A2::m_x = x; }
int get() { return m_x; }
void print() { cout << "m_x: " << get() << endl; }
};
int main5()
{
// Compilation Error because of abtract class
// A a;
// a.set( 5 );
// a.print();
B b;
b.set( 5 );
b.print();
// Compilation Error because of protected constructor
// A2 a2;
B2 b2;
b2.set( 10 );
b2.print();
return 0;
}
Thanks....