python_boost学习笔记4,类的继承封装

这里主要使用到了类的继承封装
boost::python::class_<T,boost::python:bases<Base>>("inheritance_class_name")
#include <iostream>

#include <string>



class Base  //基类 

{

        public:

                virtual std::string name() const { return "Base"; }

                virtual ~Base() {}

};



class Derived : public Base //继承类,公有继承

{

        public:

                virtual std::string name() const { return "Derived"; }

};



void fb(Base *b)  //多态的调用,父指针调用子类

{

        std::cout << b->name() << " called." << std::endl;

}



void fd(Derived *d)

{

        std::cout << "Derived " << d->name() << " called." << std::endl;

}



Base* factory()

{

        return new Derived;

}



#include <boost/python.hpp>

using namespace boost::python;



BOOST_PYTHON_MODULE(boost_eg)

{

        class_<Base, boost::noncopyable>("Base") //父类的导入

                .def("name", &Base::name)

                ;



        class_<Derived, bases<Base> >("Derived") //子类的导入,父类虚函数导入了,子类就不需要导入

                ;



        def("fb", fb);

        def("fd", fd);

        def("factory", factory, return_value_policy<manage_new_object>());

}   

python代码

#!/usr/bin/env python
import boost_eg
b = boost_eg.Base() #创建父类对象
d = boost_eg.Derived() #创建子类对象
boost_eg.fb(b) #传入父类对象,调用父类的name函数
boost_eg.fb(d) #传入子类对象,调用子类的name函数(多态)
# not possible, fd is only for Derived objects
# boost_eg.fd(b)
boost_eg.fd(d) #
x = boost_eg.factory() #返回子类对象
boost_eg.fb(x) #使用子类对象,多态

运行结果

Base called.
Derived called.
Derived Derived called.
Derived called.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值