Does dynamic_cast violate LSP?
Does the code below violates Liskov Substitution Principle (LSP)?
class Object
{
public:
virtual ~Object() = default;
};
class A : public Object
{
public:
void printA()
{
std::cout << "A" << std::endl;
}
};
class B : public Object
{
public:
void printB()
{
std::cout << "B" << std::endl;
}
};
void func(A* a)
{
a->printA();
B* b = dynamic_cast(a);
if (b != nullptr)
{
b->printB();
}
}
LSP is all about subclasses, but B is not a subclass of A, so LSP is not violated, right?