派生类怎么写析构函数 ,高手解答下。
派生类如何写析构函数 ,高手解答下。急!!!
class student
{
public:
void getvalue();
void display();
student(int,string,char);
student();
~student();//基类的析构函数
private:
int num;
string name;
char sex;
};
………………
………………
………………
class student1:public student
{
public:
void display1();
void getvalue1();
student1();
student1(int,string,char,int,string);
~student1();//派生类的析构函数
private:
int age;
string addr;
};
……………………
……………………
着个程序在编译的时候能通过,但是链接的时候就不行了。
然后我如果将他们两个析构函数注释掉就一点问题也没有了。
是不是我写错析构函数了?小弟不才 ,刚学析构函数,还有还多不明白
还请高手仔细解答下!
谢谢
------解决方案--------------------
把你的代码复制,在函数后加上{},编译运行,都没问题。可能与环境有关。
类的析构函数应该声明为 virtual:
当使用多态时,如果不把析构函数声明为virtual,即在使用delete时,只能执行基类的析构函数,而并不会执行子类的析构函数。
解决这个问题的办法就是把基类的析构函数声明为virtual,使得类的析构函数得以按正确顺序执行。
退一步说,当类中有虚函数时,就应该把析构函数声明为virtual。
class student
{
public:
void getvalue();
void display();
student(int,string,char);
student();
~student();//基类的析构函数
private:
int num;
string name;
char sex;
};
………………
………………
………………
class student1:public student
{
public:
void display1();
void getvalue1();
student1();
student1(int,string,char,int,string);
~student1();//派生类的析构函数
private:
int age;
string addr;
};
……………………
……………………
着个程序在编译的时候能通过,但是链接的时候就不行了。
然后我如果将他们两个析构函数注释掉就一点问题也没有了。
是不是我写错析构函数了?小弟不才 ,刚学析构函数,还有还多不明白
还请高手仔细解答下!
谢谢
------解决方案--------------------
把你的代码复制,在函数后加上{},编译运行,都没问题。可能与环境有关。
类的析构函数应该声明为 virtual:
当使用多态时,如果不把析构函数声明为virtual,即在使用delete时,只能执行基类的析构函数,而并不会执行子类的析构函数。
解决这个问题的办法就是把基类的析构函数声明为virtual,使得类的析构函数得以按正确顺序执行。
退一步说,当类中有虚函数时,就应该把析构函数声明为virtual。