C/C++日常学习总结(第三篇)不能重载的运算符和不同基类继承产生的二义性
来源:互联网 发布:淘宝店家开通花呗条件 编辑:程序博客网 时间:2024/05/20 12:23
#include<iostream>using namespace std;
1.全局变量和局部变量能不能重名?
【代码】
int index = 100;void main(){ int index = 200; cout<<"index="<<index<<endl; cout<<"全局 index<span style="color:#ff0000;">="<<::index</span><<endl;}
【解析】:
运行上面程序,得到的结果是:index=200 全局index=100;
这两个变量有各自的存储区域,全局变量放在数值存储区,而函数内部的变量是放在栈上,只要加上一个全局的域名操作符就可以访问到同名的全局变量。
2.不能重载的运算符有哪些?
【解析】:
(1.)成员访问符.
(2.)成员指针访问运算符.*
(3.)域运算符::
(4.)长度运算符sizeof()
(5.)条件运算符?:
3.3种派生方式下的访问权限
【解析】:
4.派生类生成过程包含3个步骤:
(1.)吸收基类的成员
(2.)改造基类的成员
(3.)添加新的成员
5.不同基类继承产生的二义性及解决办法。
#include<iostream>using namespace std;class A{ public: void print() { cout<<"hello this is A"<<endl; }};class B{ public: void print() { cout<<"hello this is B"<<endl; }};class C:public A,public B{ public: void display() { print(); }};void main(){ A a; a.print(); B b; b.print(); C c; c.print(); c.display();}
【解析】:
上面的程序,是不同的基类里面有相同的成员函数,共同派生的派生类C,他是不清楚究竟调用哪个,所以产生了不同基类继承的二义性。
解决办法:
C c;
(1.) c.A::print();//c.B::print();加上类名,告诉程序你想调用哪个成员函数
(2.)重写类C中的display()函数,可以在C类中加上一个成员函数,比如
private:BOOL m_bChose;public:C(BOOL b=TRUE):m_bChose(b){}void display(){ if(m_bChose){ A::print(); }else{ B::print(); }}
在定义C对象时指明值,C c(false);
c.display();//这个时候输出的就是hello this is B
0 0
- C/C++日常学习总结(第三篇)不能重载的运算符和不同基类继承产生的二义性
- C/C++日常学习总结(第四篇)共同基类产生的二义性和继承与组合的区别
- C/C++日常学习总结(第六篇)多基派生引起的虚函数访问二义性问题&重载,覆盖,隐藏的区别
- C/C++日常学习总结(第十四篇)C++基类与派生类的转换
- c++-运算符的重载
- C++--运算符的重载
- c++_类的运算符重载
- C/C++日常学习总结(第五篇)多态和虚函数的访问
- [C/C++]运算符的重载
- c 运算符重载总结
- C/C++日常学习总结(第十五篇)逻辑运算符对于负数的处理
- 【c++】关于类继承运算符重载友元函数
- 总结:关于如何产生几个不同随机数的问题(C/C++)
- Objective-C 类的继承、方法重载
- Objective-C 类的继承、方法重载
- 【C++】重载运算符和重载函数
- C#-运算符的重载范例
- 【c++】实现运算符的重载
- 天上掉下的表哥
- 诺基亚将被更名为“微软移动”?品牌会消失吗?
- Flex4与JavaScript交互
- 讲座:与迷茫为友的成长
- hdu 2333 Assemble 二分
- C/C++日常学习总结(第三篇)不能重载的运算符和不同基类继承产生的二义性
- 贪心——【三值的排序】
- e1s1之类的关联
- C#IO操作,删除指定目录下的所有文件夹和文件
- 媒体称刘汉在案件审讯后期崩溃 几乎每日一哭
- 面向对象三大特性---继承
- ios 初学者笔记3:objective-c 基础
- Mysql 性能优化20个原则(1)
- JavaScript 循环语句