今天在家又看了一些前阶段面试下来的问题,发现自己C++里面不懂的还是很多。所以整理了一下部分内容:
1.B是一个基类,D是B的一个派生类,代码如下:
class B
{
void over();
void over(string);
}
class D: public B
{
void over(int); // 这个函数在这里并不是overload了前面B中的那两个,而是彻底覆盖了,并非想当然的overload
using B::over; // 如确实需要如想像中的那样overload,那么就应该加上这句,它会导入所有over名的函数,所有!!
}
2.B是一个基类,D是B的一个派生类,代码如下:
class B
{
protected:
int a;
}
class D: public B
{
void test()
{
B b;
b.a = 1; // it’s wrong。以父类为类型来创建的对象不能访问其protected 成员
D d;
d.a = 1 // it’s ok。但是以自身为类型来创建的对象可以访问其protected成员
a = 1; // it’s ok。 this指针形式也可以访问。
}
}
3.B是一个基类,D是B的一个派生类,代码如下:
class B
{
public :
virtual void test(int a =1)
{
}
}
class D: public B
{
public:
void test(int a= 2)
{
}
}
void main()
{
B * pb = new B;
B* pd = new D;
D* pd2 = new D;
pb->test(); // a==1
pd->test(); // a==1
pd2->test(); // a==2
}