1)
当使用基类指针来调用派生类的回调函数时。shared_from_this()获取只能智能指针获取的是基类的,怎么使其为派生类的呢,那么要用boost的一个动态指针绑定,
2) boost::dynamic_pointer_cast<基类/派生类>(基类/派生类),这个可以互转——称为指针的类型转换
3) 关于基类和派生类的类型转换为题,主要有以下问题:我们可以将基类的指针或引用绑定到派生类上,不存在基类到派生类的转换,主要因为每个派生类都包含基类的一部分,但是一个基类的对象可能是派生类的一部分也可能不是,因此不能从基类向派生类的装换
1) 熟悉了面向对象的一些知识,知道了为什么设立虚析构函数(当用基类调用派生类对象时,派生类的析构函数才能被调用),当然并不所有的类都要定义虚析构函数,只有当该类作为基类时,才调用,虚析构函数中存放着虚函数表,过多使用会增大存储空间。
关于函数重载,覆盖,隐藏的知识点
1) 学习了函数的重载,类中函数的重载,函数覆盖以及函数隐藏
重载:函数名相同,参数类型和参数个数不同,c++会自动匹配到相应的函数
函数覆盖:主要是对面向对象而言的,子类的方法覆盖了基类的方法实现不同的功能。1、派生类覆盖基类函数2、不同范围(分别位于基类和派生类中)3、函数名相同,函数参数也相同3、基类中必须有virtual关键字,派生类不一定需要
隐藏:派生类屏蔽了其同名的基类函数
1、如果派生类的函数和基类的函数同名,但是参数不用,不论有无virtual关键字,基类函数都会被隐藏(注意别和重载混淆)
2、如果派生类和基类函数名相同,参数也相同,但是基类中没有关键字virtual,那么基类函数会被隐藏,(注意别和覆盖混淆与下面对比一下)
3、如果派生类和基类的函数名相同,参数也相同,积累中有关键字virtual,那么基类函数会被覆盖
2) boost::dynamic_pointer_cast<基类/派生类>(基类/派生类),这个可以互转——称为指针的类型转换
3) 关于基类和派生类的类型转换为题,主要有以下问题:我们可以将基类的指针或引用绑定到派生类上,不存在基类到派生类的转换,主要因为每个派生类都包含基类的一部分,但是一个基类的对象可能是派生类的一部分也可能不是,因此不能从基类向派生类的装换
1) 熟悉了面向对象的一些知识,知道了为什么设立虚析构函数(当用基类调用派生类对象时,派生类的析构函数才能被调用),当然并不所有的类都要定义虚析构函数,只有当该类作为基类时,才调用,虚析构函数中存放着虚函数表,过多使用会增大存储空间。
关于函数重载,覆盖,隐藏的知识点
1) 学习了函数的重载,类中函数的重载,函数覆盖以及函数隐藏
重载:函数名相同,参数类型和参数个数不同,c++会自动匹配到相应的函数
函数覆盖:主要是对面向对象而言的,子类的方法覆盖了基类的方法实现不同的功能。1、派生类覆盖基类函数2、不同范围(分别位于基类和派生类中)3、函数名相同,函数参数也相同3、基类中必须有virtual关键字,派生类不一定需要
隐藏:派生类屏蔽了其同名的基类函数
1、如果派生类的函数和基类的函数同名,但是参数不用,不论有无virtual关键字,基类函数都会被隐藏(注意别和重载混淆)
2、如果派生类和基类函数名相同,参数也相同,但是基类中没有关键字virtual,那么基类函数会被隐藏,(注意别和覆盖混淆与下面对比一下)
3、如果派生类和基类的函数名相同,参数也相同,积累中有关键字virtual,那么基类函数会被覆盖