请记住:
在构造和析构期间不要调用虚函数,因为这类调用从不下降至derived class。
代码如下:
#include<iostream>
using namespace std;
class Base
{
public:
Base()
{
logbase();
}
virtual void logbase()
{
cout<<"This is Base's logbase"<<endl;
}
virtual ~Base(){}
private:
};
class Derived:public Base
{
public:
virtual void logbase()
{
cout<<"This is Derived's logbase"<<endl;
}
virtual ~Derived(){}
};
int main()
{
Derived d;
system("pause");
return 0;
}
#include<iostream>
using namespace std;
class Base
{
public:
Base()
{
init();
}
virtual void logbase()
{
cout<<"This is Base's logbase"<<endl;
}
virtual ~Base(){}
private:
void init()
{
logbase();
}
};
class Derived:public Base
{
public:
/*
Derived()
{
logbase();
}
*/
virtual void logbase()
{
cout<<"This is Derived's logbase"<<endl;
}
virtual ~Derived(){}
};
int main()
{
Derived d;
system("pause");
return 0;
}
结果均为:
可是若当该虚函数会调用成员函数时
#include<iostream>
using namespace std;
class Base
{
public:
Base():ma(1),mb(2)
{
logbase(ma,mb);
}
virtual void logbase(int x,int y)
{
cout<<"This is Base's logbase"<<endl;
cout<<"x+y= "<<x+y<<endl;
}
virtual ~Base(){}
private:
int ma;
int mb;
};
class Derived:public Base
{
public:
virtual void logbase(int x,int y)
{
cout<<"This is Derived's logbase"<<endl;
cout<<"x*y= "<<x*y<<endl;
}
virtual ~Derived(){}
private:
int da;
int db;
};
int main()
{
Derived d;
system("pause");
return 0;
}
在build时会显示:
Linking...
LINK : fatal error LNK1168: cannot open Debug/vita.exe for writing
执行 link.exe 时出错.