从二叉搜索树(Binary Search Tree)入手,学习C++中类的构建 --(四)未完成。占坑。C++下的强制类型转换带来的问题
2015-03-14 10:17
381 查看
更新:看得多了,发现自己对C++的理解不到位,这篇文章先冻结。
占坑。未完成。
还没研究明白
占坑。未完成。
class book { public: int a; int b; book(): a(9),b(-1){} virtual void print33(){cout<<(a*10)<<std::endl;} void print1(){cout<<"asd"<<std::endl;} void print12(){cout<<a+1<<std::endl;} }; class novel : public book { public: int num; int a; void print(){cout<<"heheda\n"<<std::endl;} virtual void print123(){cout<<"heheda\n"<<std::endl;} novel(): num(11){} }; int main() { book history; novel GoneWith; (dynamic_cast<book*> (&GoneWith))->print12(); /*GoneWith因为cast而收缩了自己的范围,因此GoneWith的print成员不能用*/ //int cd = (dynamic_cast<novel*> (&history))->num; /*卧槽这cd怎么能用?只是扩大指针的范围,你后面那片还是没数据啊*/ /*看来没有调动构造函数,只是读取了一片未定义内存*/ /*果断这个是不安全的!有时会报错*/ //(dynamic_cast<novel*> (&history))->print12();/*history拓展为一个novel*/ //history转化为novel,那么它就能去寻找novel下的函数.说明这些函数是单独放出来的。 /*print33没有问题,动态绑定的。而print:history 并没有合适的空间来存放print函数,说明这个print不以函数表的形式存在,而是静态*/ /*这里报错了,访问冲突。问题出在变量a的访问有问题*/ /*只是编译器认为它的边界拓展,等访问的时候就会访问一个把原来的a覆盖的、内存中不存在的a*/ /*可见,强制转换带来的不安全性。尤其是负责较小空间的指针转换成负责较大空间的指针时*/ /*问题二,各种cast的结果不同*/ (dynamic_cast<novel*> (&history))->print12();/*history拓展为一个novel,报错*/ (reinterpret_cast<novel*> (&history))->print12();/*history拓展为一个novel,可运行输出10*/ (static_cast<novel*> (&history))->print12();/*history拓展为一个novel,输出10 ---》说明访问的是book::a而不是novel::a */ return 0; }
还没研究明白
相关文章推荐
- 从二叉搜索树(Binary Search Tree)入手,学习C++中类的构建 --(一)BST与基本框架
- 从二叉搜索树(Binary Search Tree)入手,学习C++中类的构建 --(三)public\private\protected、封装\继承\多态、提供更丰富的函数接口
- 从二叉搜索树(Binary Search Tree)入手,学习C++中类的构建 --(二)class与struct, 构造函数,重载函数
- 编程算法 - 二叉搜索树(binary search tree) 集合(set)和映射(map) 代码(C)
- BST树(Binary Search Tree)二叉搜索树
- 【算法导论学习-24】二叉树专题2:二叉搜索树(Binary Search Tree,BST)
- 【cocos2d x学习笔记问题收集】——未完成 继续完善中
- 数据结构 《5》----二叉搜索树 ( Binary Search Tree )
- java类加载器学习2――自定义类加载器和父类委托机制带来的问题
- 编程算法 - 二叉搜索树(binary search tree) 代码(C)
- 二叉搜索树;二叉查找树;二叉排序树;binary search tree
- 二叉搜索树(BST)的最近公共祖先(LCA)问题(Lowest Common Ancestor of a Binary Tree)
- Eclipse 3.3里新TreeViewer给EMF应用程序带来的一个问题
- ExtJS学习1--treepanel的几个问题,导盲贴
- 二叉搜索树(Binary Search Tree)
- 一个问题带来的学习
- Java类加载器学习2——自定义类加载器和父类委托机制带来的问题
- 学习数据结构 二叉查找树(binary search tree)
- ※数据结构※→☆非线性结构(tree)☆============二叉搜索树(二叉查找树) 链式存储结构(tree Binary Search list)(二十五)
- Java二叉搜索树(Binary Search Tree)实现