虚析构函数

    xiaoxiao2023-11-11  148

    //如果基类析构函数不是虚析构函数,派生类的析构函数不会被调用 #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; class Animal { public: Animal(char *name); void print_name(); virtual void print_color(); virtual void speak(); virtual ~Animal(); private: char *m_pAnimalName; }; Animal::Animal(char *name) { int len = strlen(name) + 1; m_pAnimalName = new char[len]; strcpy(m_pAnimalName, name); } Animal::~Animal() { cout << "animal desstrutor" << endl; if (m_pAnimalName) delete[] m_pAnimalName; } void Animal::print_name() { cout << "name:" << m_pAnimalName << endl; } void Animal::print_color() { } void Animal::speak() { cout << "animal lauguage" << endl; } class Cat:public Animal { public: Cat(char *name, char *catcolor); virtual void print_color(); virtual void speak(); virtual ~Cat(); private: char *m_pCatColor; }; Cat::Cat(char *name, char *catcolor) :Animal(name) { cout << "cat constructor" << endl; m_pCatColor = new char[strlen(catcolor) + 1]; strcpy(m_pCatColor, catcolor); } Cat::~Cat() { cout << "cat desstuctor"<< endl; if (m_pCatColor) delete[] m_pCatColor; } void Cat::print_color() { cout << "cat color:" << m_pCatColor << endl; } void Cat::speak() { cout << "cat language miaomiao"<< endl; } int main() { Animal *p[2]; int i; p[0] = new Cat("short_haired_cat","white"); p[0]->print_name(); p[0]->print_color(); p[0]->speak(); p[1] = new Cat("persian_cat", "brown"); p[1]->print_name(); p[1]->print_color(); for (int i = 0; i < 2; i++) { delete p[i]; } system("pause"); return 0; } 李响Superb 认证博客专家 机器学习 TensorFlow 图像处理 成为一名优秀的算法工程师⬆️ ,目前还在读软件工程,AI攻防、算法和深度学习方向,微博同名❤️ :李响Superb,(记得关注,有问题微博私信!)我们一起努力呀!
    最新回复(0)