13.1.1 无意义的基类对像(Nonsensical Base-Class Objects)_学习

//以下对上面的程序进行改进
#include <iostream>
using namespace std;
class A{
public:
	virtual void fn()=0; 
	//如果这个声明后不定义的话,必须得声明为纯虚函数才行,不然不能通过编译
}; 
//A类我中无fn成成员函数
class B : public A
{
	public:
		void fn(){
		   cout<<" I am Class B";
		};
};
class C : public A{
	public:
	void fn(){
		cout<<" I am Class C";
	};
};
void f(A* pa)
{
    pa->fn();
};
int main()
{
	B b;
	C c;
	f(&c);
	f(&b);

	//这里好像直接传B *b就不能给f函数,但声明为A *a就可以传入f函数
	//这里可能有一个类型传换的问题,暂时不做考虑
	A *a = new B();
	A *aa = new C();
    f(a);
	f(aa);
	cout<<"I am main"; 
	system("pause");
	return 0;
}

  

posted @ 2012-02-12 16:22  简单--生活  阅读(334)  评论(0编辑  收藏  举报
简单--生活(CSDN)