Viscual C++编程深入引导书中有一段说:在成员函数中可能调用纯虚函数,但在构造函数或析构函数内调用一个纯虚函数将导致程序运行错误,因为没有为纯函数定义代码?但我做过试验,在构造函数中调用没有出任何问题?
解决方案 »
- 如何修改VC++6.0生成的EXE图标
- report风格的listctrl插入edit以后 item之间的虚线被挡了 怎么办
- 我用ShellExecute打开一个pps文件,然后我怎么关闭这个pps文件呢?
- 关于安装程序的制作
- 怎么做Windows2000下的服务程序,任务管理器中的看到的那些服务。
- windowSDK挂起线程和唤醒线程出问题。。
- w32.Nimda.E@tftp2588---->怎么杀了他啊(100分)
- 对在VC中使用word一个例子的疑问(lhbyron(天空的云)的回复的例子)
- 复杂的报错
- 关于dll 的问题
- 建立tcp连接以后,如果没有数据交换,连接会保持到什么时候?
- 问:如何设计右键菜单
实际上在VC上这样做不是运行出错,而是压根就编译通不过。VC会在link的时候告诉你unresolved external symbol
若在父类构造函数或析构造函数中调用虚函数时。虚函数不起作用,不起虚的作用。但仍可调用,当作普通函数成员一样调用。下面的就是证明:#include<iostream.h>
class base
{
private:
int age;
int sex;
public:
base(int iage,int isex)
{
age=iage;
isex=isex;
cout<<"\ncalled the virtual function at the base class constructor"<<"\n"<<getage();
}
virtual int getage()=0
{
return age;
}
~base()
{
cout<<"\ncalled the virtual function at the base class destroyer"<<"\n"<<getage();
}
void dd()
{cout<<"call the virtual getage() at the base class"<<getage();}
};class assc:public base
{
private:
int age;
int sex;
public:
assc(int aage=0,int asex=0,int bage=100,int bsex=100):base(bage,bsex)
{
age=aage;
sex=asex;
}
int getage()
{
return age;
}};
main()
{
assc a;
}运行结果:called the virtual function at the base class constructor
100
called the virtual function at the base class destroyer
100
Press any key to continue但在子类中调用是则也可能调用的是父类的
class B
{
B();virtual void pvf()=0;};
一般点:
void B::pvf(){...}class D
{
D();
void pvf();
};void D::pvf()
{...}
如果在B::B(){pvf();}
那么在编译时vptr设置为vptr的操作会在programer的任何操作前 这个时候vptr为B::vtbl你说这个时候可以吗??
virtual int getage()=0
{
return age;
}能叫纯虚函数吗??class CFather
{
public:
CFather();
virtual ~CFather(); virtual void GetName() = 0};CFather::CFather()
{
GetName();
}CFather::~CFather()
{
}
class CSon : public CFather
{
public:
CSon();
virtual ~CSon(); virtual void GetName() {};};CSon::CSon()
{
GetName();
}CSon::~CSon()
{}
楼主需要先复习一下什么叫纯虚函数。
谢谢提醒!