程序设计与算法三六周测试finish

看上去像多态要点:

派生类中可以调用基类的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;
}

多态的表现形式二

  • 派生类的对象可以赋给基类引用
  • 通过基类引用调用基类和派生类中的同名虚函数时:
  1. 若该引用引用的是一个基类的对象,那么被调用是基类的虚函数;
  2. 若该引用引用的是一个派生类的对象,那么被调用的是派生类的虚函数。这种机制也叫做“多态”。
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,

多态的表现形式一

  • 派生类的指针可以赋给基类指针。
  • 基通过类指针调用基类派生状语从句:类中的同名虚函数时:
  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;
}

猜你喜欢

转载自blog.csdn.net/qq_31647835/article/details/81304650