首页 > 编程语言 >c++中的析构函数和纯虚函数

c++中的析构函数和纯虚函数

时间:2023-05-31 10:22:37浏览次数:34  
标签:函数 子类 c++ 纯虚 析构 基类

析构函数:

c++中当delete一个类对象时,会默认调用其析构函数,析构函数的作用就是释放对象占用的堆空间。

一般基类的析构函数需写成虚函数,这是因为在多态下,我们一般用基类的指针来指向一个子类对象,若基类的虚函数未被重写,那么可能会造成内存泄漏。

因此需要在子类重写基类的虚函数来保证在delete一个基类指针时能够正确调用对应的析构函数。

class Parent{
public:
    Parent(){
        cout << "Parent construct function"  << endl;
    };
    virtual ~Parent(){
        cout << "Parent destructor function" <<endl;
    }
};

class Son : public Parent{
public:
    Son(){
        cout << "Son construct function"  << endl;
    };
    ~Son(){
        cout << "Son destructor function" <<endl;
    }
};

int main()
{
    Parent* p = new Son();
    delete p;
    p = NULL;
    return 0;
}
//输出:
//Parent construct function
//Son construct function
//Son destructor function
//Parent destructor function

纯虚函数:

纯虚函数是一种特殊的虚函数,其被关键字virtual修饰,且函数后直接跟 =0 而不去定义,例如:

class A
{
public:
    virtula void func()=0;
}

含有纯虚函数的类叫抽象类。因为纯虚函数没有定义,因此抽象类无法被实例化,一般只用作接口类使用,在其派生类中给出纯虚函数的实现。只有实现了纯虚函数的派生类才可以被实例化。

 

标签:函数,子类,c++,纯虚,析构,基类
From: https://www.cnblogs.com/Explosion556/p/17445317.html

相关文章

  • 【c&c++】erase怎么用c语言,C++ erase()函数使用时的注意点
    遇见的场景删除vector容器指定元素时;erase()函数的用法vector::erase():从指定容器删除指定位置的元素或某段范围内的元素。具体用法如下:iteratorerase(iterator_Where);删除指定位置的元素,返回值是一个迭代器,指向删除元素的下一个元素;iteratorerase(iterator_First,i......
  • ZOJ - 4069(2018 青岛现场赛 L) - 指数型生成函数
    题目链接:https://vjudge.net/problem/ZOJ-4069 解题思路:1.n个点组成环的不同种类数是(n-1)!/2;n个点组成一条链的不同种类数是n!/2,特别的n==1时种类数为1。用指数型生成函数表示k个点形成链的种类:1/2(2x+2!*x^2/2!+3!*x^3/3!+4!*x^4/4!+..+n!*x^n/n!)=1/2(2*x+x^2+x^3+x^4+......
  • cassandra cpp driver中bind list——用cass_statement_bind_collection函数
     CassErrorinsert_into_collections(CassSession*session,constchar*key,constchar*items[]){CassErrorrc=CASS_OK;CassStatement*statement=NULL;CassFuture*future=NULL;CassCollection*collection=NULL;constchar**item=NULL;c......
  • 常见LOSS函数之Cross Entropy(交叉熵)
    常见LOSS函数之CrossEntropy(交叉熵)交叉熵是分类问题常用的损失函数。熵熵表示稳定性或者说惊喜度,熵越高表示越稳定,其惊喜度就越低。示例一般用H(p)表示熵交叉熵交叉熵=熵+散度散度代表分布的重叠程度,散度越高重合度越少。当两个分布p和q相等时,散度等于0,此时交叉熵......
  • Kotlin中的扩展函数和扩展属性
    扩展函数Kotlin中可以给一个类额外添加这个类中没有的函数,即扩展函数。例如:funInt.dp2px(context:Context){ TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,this.toFloat(),context.resources.displayMetrics)}funtest(){ println(16.dp2px())}上述代......
  • MySQL之常用函数介绍
    一:函数的简介函数可以把我们经常使用的代码封装起来,需要的时候直接调用即可。这样既提高了代码效率,又提高了可维护性。在SQL中我们也可以使用函数对检索出来的数据进行函数操作。使用这些函数,可以极大地提高用户对数据库的管理效率。我们在使用SQL语言的时候,不是直接和这门......
  • 14)系统函数
    1、数字函数:注意:1)d取负值代表整数部分有d个低位为0;d取正值表示保留小数点后几位,四舍五入;truncate是截断取值;2)rand(),代表 0-1之间的随机小数; 3)ceil代表向上取整,floor代表向下取整;2、字符串函数:要注意:1)char_length是字符串的长度,length代表的是该字符串是几个字节;......
  • Excel 中的OFFSET、MATCH 和 HLOOKUP的函数介绍
    OFFSET、MATCH和HLOOKUP是Excel中常用的三个函数,它们的功能分别如下:1.OFFSET函数:根据指定的行列偏移量,从某个单元格开始返回一个新的单元格区域,可以用于提取数据区域内部特定的行或列,或者将数据区域向右或向左平移。2.MATCH函数:在某个区域或列表中查找指定的值,并返回其......
  • 过程函数与递归
    将代码串进行打包,就是过程与函数。过程与函数调用自己则为递归。有一点小难但不要怕哦。P1028P1036P1149P1217......
  • 去往js函数式编程(3)
      我们将使用接下来的函数实现:让你更具有声明性,你会发现自己的关注点将转移到你需要什么,而不是如何做;繁琐的细节被隐藏在我们的函数内部。我们将不再编写一系列可能嵌套的for循环,而是专注于使用函数作为构建快来制定我们期望的结果。  使用reduce()操作可以得到单个值;使用......