c++错误:error LNK2001
来源:百度知道 编辑:UC知道 时间:2024/05/18 04:52:58
//空的虚函数到底有什么用?能否举例说明一下,谢谢了
//派生类并不一定必须实现基类中的虚函数,如果派生类想通过虚函数机制则必须建立一条从积累到派生类的虚函数路径。许多没有使用虚函数的中间类也必须声明该函数,以保证其后的派生类能使用该虚函数。这样的话,声明一个虚函数就可以达到其目的。
//例如:
#include <iostream.h>
class A
{
public:
virtual void printOn(){cout<<"Class A"<<endl;}
};
class B: public A
{
public:
void printOn(){}
};
class C: public B{
public:
void printOn(){cout<<"Class C"<<endl;}
};
void Show(A*a)
{
a ->printOn();
}
void mian()
{
A *a = new A;
B *b = new B;
C *c = new C;
Show (a);
Show (b);
Show (c);
}
//通过上面简单的程序可以看出,虚函数B声明为空,它的意义在于,类B并不需要pringOn()函数,
//声明它是为了保证B的派生类能使用类A的虚函数界面,使调用show(c)能沿着从A对象的虚函数路径正确存取C::printOn()虚函数。
结果出现错误
//派生类并不一定必须实现基类中的虚函数,如果派生类想通过虚函数机制则必须建立一条从积累到派生类的虚函数路径。许多没有使用虚函数的中间类也必须声明该函数,以保证其后的派生类能使用该虚函数。这样的话,声明一个虚函数就可以达到其目的。
//例如:
#include <iostream.h>
class A
{
public:
virtual void printOn(){cout<<"Class A"<<endl;}
};
class B: public A
{
public:
void printOn(){}
};
class C: public B{
public:
void printOn(){cout<<"Class C"<<endl;}
};
void Show(A*a)
{
a ->printOn();
}
void mian()
{
A *a = new A;
B *b = new B;
C *c = new C;
Show (a);
Show (b);
Show (c);
}
//通过上面简单的程序可以看出,虚函数B声明为空,它的意义在于,类B并不需要pringOn()函数,
//声明它是为了保证B的派生类能使用类A的虚函数界面,使调用show(c)能沿着从A对象的虚函数路径正确存取C::printOn()虚函数。
结果出现错误
错误原因:main(),拼成了mian().
虚函数的作用是允许在派生类中对积累的虚函数重新定义,即在同一类族中对同一消息做出不同的响应。
原来的程序若不用虚函数相当于:
A *a = new A;
a ->printOn();
B *b = new B;
b ->printOn();
C *c = new C;
c ->printOn();
用虚函数可简化为:
A *a = new A;
a ->printOn();
a = new B;
a ->printOn();
a = new C;
a ->printOn();
少申请了两个指针。
小农不才~~ 请你在新建工程的 时候先把Win32 Applicatioan 换成
Win32 Console Applicatioan 然后再看看~~~