#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