关于用const重载函数和析构函数

本文探讨了如何在C++中使用const来重载函数,并讲解了析构函数在形参为类类型时的行为。在类中定义的两个成员函数,一个带有const修饰,一个没有,main函数调用时会根据对象状态选择合适的方法。同时,当函数的参数或返回值是类类型时,析构函数会被多次调用,分别用于形参和返回值的销毁。
摘要由CSDN通过智能技术生成

定义一个类,该类中存在两个函数,差别只有const

#include "stdafx.h"
#include<iostream>
using namespace std;
class MyClass
{
public:
    void show_n();          //可以进行修改
    void show_n()const;     //函数对当前对象是只读的
    ~MyClass();           //输出此时对象的地址
};

成员函数如下

void MyClass::show_n()
{    cout << "free" << endl;}
void MyClass::show_n()const  //两个函数差别只有const
{    cout << "limited" << endl;}
MyClass::~MyClass()
{    cout << this << endl;}

在main中调用这两个成员函数

int main()
{
    MyClass a;             const 时候用const定义的函数
    const MyClass b;       没有用const定义对象时优先用普通的函数
    a.show_n();
    cout << "================" << endl;
    b.show_n();

发现b调用const 的那个,a调用无const的那个

================================================
关于形参与析构函数的知识
如果在一个函数中形参为类类形的,在形参被销毁时,会调用析构函数

MyClass::~MyClass()
{    cout << this << endl;}
void a(MyClass a)
{    a.show_n();}
void a1(const MyClass& a)  // 与之前相比,是对原对象进行操作,就不会调用析构函数,如果不想让调用人员修改原对象,加上const
{                             //如果没有用const修饰的函数,在函数中调用一个const 的对象的函数,会报错的
   a.show_n();
}

更进一步,若定义的函数的类型也为该类类型的,会调用2次析构函数,其中,一次为释放形参,一次为返回值被销毁
注:返回值放在一个临时区域,当执行下一条语句时,返回值被销毁

====================================
动态内存开辟与析构函数的传送门如下
https://blog.csdn.net/zimuHP/article/details/83417236

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值