How to check if C ++ abstract method is at runtime

How to check if C ++ abstract method is at runtime

class ABase{
public:
 virtual void do1() = 0;
};

class BBase: public ABase{
public:
 virtual void do1(){}
};

class CBase: public ABase{
public:
};

ABase * base = rand() % 2 ? new BBase() : new CBase();
if(&(base->do1) != 0)
  base->do1();

This gives an error.

Thanks Max

+3
source share
7 answers

Since you cannot instantiate an abstract class, any class that you encounter at runtime will not have any pure virtual methods (unless you are a constructor or destructor at that time), all of them will be overcome using clean chip. There is nothing to check.

+14
source

, . , , , . CBase, .

+4

CBase , ABase:: do1(). . , , , do1() . .

, .

+3

, . CBase() " ".

+3

, ( ), CBase do1() ABase.

+1

CBase, ... , .. .

, , ABase:

class ABase {
public:
 void do1() { /* do nothing */ }
};

class BBase: public ABase {
public:
 void do1() { /* do something */ }
};

class CBase: public ABase {};

ABase * base = rand() % 2 ? new BBase() : new CBase();
base->do1();
+1

, do1() , & ABase:: do1, & BBase:: do1 & CBase:: do1 . , & ABase:: do1 & CBase:: do1 , CBase , , , .

, CBase, , , .

"C": , NULL, , NULL, , .

+1
source

Source: https://habr.com/ru/post/1777708/


All Articles