c++父类与子类的转换(QT环境下)
来源:互联网 发布:运营商网络重构步骤 编辑:程序博客网 时间:2024/06/15 01:12
今天重构QT控件获得焦点的函数时,需要将基类传化为子类,尝试过一些办法后成功,记录一下。
1.子类向基类(向上强制类型转换)
切割:覆盖方法和子类数据丢失的现象生成切割(slice)。
下面套用一个别人的例子
#include "stdafx.h" #include <iostream> using namespace std; class Base { public: int b; virtual void Test() { cout << "base" <<endl; } }; class Derived:public Base { public: int tt; int d; virtual void Test() { cout << "derived" <<endl; } virtual void check() { cout << "derived check" <<endl; } }; int main() { Derived d; d.d = 1; d.tt = 2; Base b = d;//直接赋值(产生切割) (可以直接赋值进行转换) b.Test(); Base& b2 = d;//使用引用赋值(不产生切割) b2.Test(); Base* b3 = &d;//使用指针赋值(不产生切割) b3->Test(); //b3->check(); system("PAUSE"); return 1; }然后我们看监视的结果
2.基类向子类(向下强制类型转换)
条件为:1、源类型必须有虚函数;
2、必须打开编译器的RTTI开关(vc6: progect-> settings -> c/c++ tab ->category[c++ language]-> Enable RTTI);
3.必须有继承关系。
引用别人的程序:
class A { public: //要使用dynamic_cast,父类必须要有一个虚函数 virtual void print() { cout<<"Class A"; } }; class B:public A { public: void fun() { cout<<"Class B"<<endl; } }; int main() { //pA必须是它的子类所初始化 A *pA = new B; //成功时返回子类指针,否则返回0 //将指向父类的pA指针转成指向子类的指针pB B *pB = dynamic_cast<B*>(pA); if (pB) { //访问子类的fun函数 pB->fun(); } delete pA; return 0; }
另外贴上自己在QT中更改的代码(片段)
这里QWidget是MyLabel的基类
getnum是MyLabel的函数
void Widget::keyPressEvent(QKeyEvent *k ){ if(k->key()==Qt::Key_A) { bool a=this->focusNextChild();//按A时焦点切换至上一部件 qDebug("%d",a); } else if(k->key() ==Qt:: Key_D) { this->focusNextPrevChild(TRUE);//按D时焦点切换至下一部件 } if(k->key()==Qt::Key_Enter||k->key()==Qt::Key_Return)//调用回车进入子程序 { QWidget *Current_focus=new MyLabel; Current_focus=QApplication::focusWidget(); MyLabel *aaa=dynamic_cast<MyLabel*>(Current_focus); int n=aaa->GetNum(); DouClicked(n); }}
阅读全文
0 0
- c++父类与子类的转换(QT环境下)
- 父类与子类的转换条件
- 父类与子类之间的转换
- Java子类与父类的转换
- 父类与子类之间的转换
- java 父类与子类的转换
- Java子类与父类的转换
- 父类与子类之间的转换
- C#中子类与父类的相互转换
- C#中子类与父类的相互转换
- Java子类与父类之间的对象转换
- C#中子类与父类的相互转换
- java 子类与父类 转换
- Java 父类与子类 类型转换
- 关于继承(子类对象与父类对象【相互转换】的过程)
- 谈谈基类与子类的this指针(C++)
- 谈谈基类与子类的this指针(C++)
- 谈谈基类与子类的this指针(C++)
- Batch Normalization导读
- android 通过代理activity的方式实现插件化
- Lombok
- Terminator安装与设置
- 【Java学习之路】Java编程之判断素数
- c++父类与子类的转换(QT环境下)
- Android的按键页面跳转设计
- Google Analytics
- jsp与Servlet
- Python3 简介及使用
- 鱼眼校正
- svn提交中遇到locked锁定问题
- 微信分享SDK接入——Java
- string.h头文件中局部函数的自我编写,简易版