class A
{
public:
virtual ~A(){}
virtual void SetNumber(int number) = 0;
virtual void Fun();
};
void A::Fun()
{
std::cout << "A::Fun" << std::endl;
}
class B : public A
{
public:
virtual ~B(){}
virtual void SetNumber(int number) override;
virtual void Fun() override;
void Print();
private:
int m_number;
};
void B::SetNumber(int number)
{
m_number = number;
}
void B::Fun()
{
std::cout << "B::Fun" << std::endl;
}
void B::Print()
{
std::cout << m_number << std::endl;
}
int main(int argc, char* argv[])
{
std::shared_ptr<A> p = std::make_shared<B>();
p->SetNumber(argc);
std::shared_ptr<B> pB = std::dynamic_pointer_cast<B>(p);
if (pB)
pB->Print();
auto pA = std::static_pointer_cast<A>(pB);
if (pA)
pA->Fun();
return EXIT_SUCCESS;
}
基类、派生类绑定智能指针后的转换
最新推荐文章于 2024-01-19 00:09:08 发布
本文展示了C++中派生类如何继承并重写基类的虚函数。通过`class A`定义了一个基类,包含一个纯虚函数`SetNumber`和一个普通虚函数`Fun`。`class B`继承自`class A`,实现了`SetNumber`和`Fun`,并新增了`Print`方法。在`main`函数中,利用智能指针动态创建`B`对象,展示了多态特性的应用。
摘要由CSDN通过智能技术生成