C++虚函数的用法

    xiaoxiao2023-10-09  136

    从类模板实例化的每个模板类有自己的类模板数据成员,该模板类的所有对象共享一个static数据成员

    和非模板类的static数据成员一样,模板类的static数据成员也应该在文件范围定义和初始化

    每个模板类有自己的类模板的static数据成员副本

    class A { public: virtual ~A(){ cout << "A::~A() is called.\n" ; } } ; class B : public A { public: ~B(){ cout << "B::~B() is called.\n" ; } } ; void main() { A *Ap = new B ; B *Bp2 = new B ; cout << "delete first object:\n" ; delete Ap; cout << "delete second object:\n" ; delete Bp2 ; }

    不用virtual修饰的话,基类指针new B对象时,释放动态声明的内存只能释放派生类中基类析构函数。

    在基类中使用virtual的话,可以正确指向释放释放的哪个类的内存。

    template<typename T> class A {   public:           A() {};      A(int a)      {               num = a;      }      virtual void shownum()      {               cout << num << "\t";      } protected:      static int num; }; int A<int>::num = 0;//只有静态成员才能在其类外定义 class B : public A<int> //派生一般类 { public:      B() {};      B(int a, double x) :A(a) ,y(1)      {               y = x;      }      void shownum() {               cout << y <<"afaf"<< endl; } protected:      double y; }; Void main() {      A<int> c(1);      c.shownum();      A<int>* a,*d;      B b(12,2);      a = &b;      a->shownum();      d = new A<int>;      d->shownum(); }

    虚析构函数:可以在子类中正确释放内存。

    被关键字 virtual 修饰的成员函数称为虚函数

    实现运行时多态的关键首先是要说明虚函数,另外,必须用

    基类指针调用派生类的不同实现版本

     

    输出窗口:

     

     

     

    被virtual修饰的函数只能在派生类中重写这个方法实现多个版本,

    在基类中使用virtual的话,可以正确指向哪个类对象的函数。

    最新回复(0)