看上去像多态要点:
派生类中可以调用基类的public对象,不能调用基类的private对象
2:Fun和Do
描述
程序填空输出指定结果
#include <iostream>
using namespace std;
class A {
private:
int nVal;
public:
void Fun()
{ cout << "A::Fun" << endl; };
void Do()
{ cout << "A::Do" << endl; }
};
class B:public A {
public:
virtual void Do()
{ cout << "B::Do" << endl;}
};
class C:public B {
public:
void Do( )
{ cout <<"C::Do"<<endl; }
void Fun()
{ cout << "C::Fun" << endl; }
};
void Call(//此处补充代码
) {
p.Fun(); p.Do();
}
int main() {
C c;
Call( c);
return 0;
}
输入
无
输出
A::Fun
C::Do
样例输入
None
样例输出
A::Fun
C::Do
要点:
多态的两种方式,指针和引用。
#include <iostream>
using namespace std;
class A {
private:
int nVal;
public:
void Fun()
{
cout << "A::Fun" << endl;
};
void Do()
{
cout << "A::Do" << endl;
}
};
class B :public A {
public:
virtual void Do()
{
cout << "B::Do" << endl;
}
};
class C :public B {
public:
void Do()
{
cout << "C::Do" << endl;
}
void Fun()
{
cout << "C::Fun" << endl;
}
};
void Call(B &p//注意这里的引用,参考笔记————多态的表现形式二
// 在此处补充你的代码
) {
p.Fun(); p.Do();
}
int main() {
C c;
Call(c);
getchar();
return 0;
}
多态的表现形式二
- 派生类的对象可以赋给基类引用
- 通过基类引用调用基类和派生类中的同名虚函数时:
- 若该引用引用的是一个基类的对象,那么被调用是基类的虚函数;
- 若该引用引用的是一个派生类的对象,那么被调用的是派生类的虚函数。这种机制也叫做“多态”。
class CBase {
public:
virtual void SomeVirtualFunction() { }
};
class CDerived:public CBase {
public :
virtual void SomeVirtualFunction() { }
};
int main() {
CDerived ODerived;
CBase & r = ODerived;
r.SomeVirtualFunction(); //调用哪个虚函数取决于r引用哪种类型的对象,调用CDerived的
return 0;
}
3:这是什么鬼delete
要点:虚析构函数
4:怎么又是Fun和Do
要点:
1,派生类的指针可以赋给基类指针。
2,
多态的表现形式一
- 派生类的指针可以赋给基类指针。
- 基通过类指针调用基类派生状语从句:类中的同名虚函数时:
- 该若指针指向一个基类的对象,被那么调用的是基类的虚函数 ;
- 若该指针指向一个派生类的对象,那么被调用的是派生类的虚函数。这种机制就叫做“多态”。
class CBase {
public:
virtual void SomeVirtualFunction() { }
};
class CDerived:public CBase {
public :
virtual void SomeVirtualFunction() { }
};
int main() {
CDerived ODerived;
CBase * p = & ODerived;
p -> SomeVirtualFunction(); //调用哪个虚函数取决于p指向哪种类型的对象,CDerived的 SomeVirtualFunction()
return 0;
}