C++中Virtual的作用

来源:互联网 发布:批量写淘宝宝贝卖点 编辑:程序博客网 时间:2024/05/22 11:07

1、virtual析构函数的作用
当定义了一个基类,并用来继承的。当其他类用到基类,其析构函数必须是虚函数,不然在调用基类析构函数的时候,不会去调用子类的析构函数,从而会造成内存泄漏。
class A
{
public:
A() { ptra_ = new char[10];}
~A() { delete[] ptra_;} // 非虚析构函数
private:
char * ptra_;
};
class B: public A
{
public:
B() { ptrb_ = new char[20];}
~B() { delete[] ptrb_;}
private:
char * ptrb_;
};
void foo()
{
A * a = new B;
delete a;
}
例子中在执行delete a的时候,实际上只调用了~A(),并没有对B类的析构函数进行调用。

2、virtual继承作用
当基类的函数为虚函数的时候,可以通过基类去访问子类的函数。
class A
{
public:
void print()
{
cout << “A()” << endl;
}
};

class B : public A
{
public:
virtual void print()
{
cout << “B()” << endl;
}
};

class C : public B
{
public:
virtual void print()
{
cout << “C()” << endl;
}
};

int _tmain(int argc, _TCHAR* argv[])
{
A* ap;
B* bp;
B b;
C c;

ap = &b;  ap->print();  ap = &c;  ap->print();  bp = &c;  bp->print();  return 0;  

}
输出结果为:A() A() C()

原创粉丝点击