In short what I want to do is have an Abstract Base class call a method implemented in a subclass. I am sure I have done this at some point in the past, but I can't remember how. Anyway some sample code.
Abstract Base Class:
Code:
#pragma once
class CAbstractBase
{
public:
CAbstractBase(void);
~CAbstractBase(void);
protected:
CString MyClassName;
virtual void SetClassName()=0;
};
Code:
#include "StdAfx.h"
#include "AbstractBase.h"
CAbstractBase::CAbstractBase(void)
{
SetClassName();
}
CAbstractBase::~CAbstractBase(void)
{
}
// If this method is commented out, I get a linker error, that this
// symbol CAbstractBase::SetClassName(void) is missing
void CAbstractBase::SetClassName()
{
MyClassName = "CAbstractBase";
}
SubClass:
Code:
#pragma once
#include "abstractbase.h"
class CSubClass :
public CAbstractBase
{
public:
CSubClass(void);
~CSubClass(void);
virtual void SetClassName();
};
Code:
#include "StdAfx.h"
#include "SubClass.h"
CSubClass::CSubClass(void)
{
}
CSubClass::~CSubClass(void)
{
}
void CSubClass::SetClassName()
{
MyClassName = "CSubClass";
}
Program code:
Code:
CSubClass AClass;
int T = 3;
I put a break point on the T = 3 assignment.
Anyway run as is, MyClassName == "CAbstractBase", not "CSubClass" which is the desired result. If I comment out the SetClassName() from the abstract base class, I get a linker error. I am not sure why since the base class will never be instanced because it is abstract. If I define the function, I get the wrong class name ( I kind of expected that to happen).
Is there a way to get the base class to call the sub-class method?