this函数和析构函数

简介: this函数和析构函数

一、this函数


对于普通的成员函数,this指向调用该函数的对象


对于构造函数,this指向正在创建的对象


#include <iostream>
using namespace std;
class Teacher{
public:
    /*Teacher(const string& name,int age)
        :m_name(name),m_age(age){
        cout << "构造函数:" << this << endl;  
    }*/
    //通过this区分函数的形参和成员变量
    Teacher(const string& m_name,int m_age){
        this->m_name = m_name ;
        this->m_age = m_age;
    }
    void print(void){
        cout << m_name << ',' << m_age <<endl;
        cout << this->m_name << ',' <<
            this->m_age << endl;
    }/*编译处理后变成类似如下:
    void print(Teacher* this){
        cout << this->m_name << ',' <<
            this->m_age << endl;
    }*/
private:
    string m_name;
    int m_age;
};
int main(void)
{
    Teacher t1("杨健",45);
    cout << "&t1:" << &t1 << endl;
    Teacher t2("王建立",45);
    cout << "&t2:" << &t2 << endl;
    t1.print();//Teacher::print(&t1)
    t2.print();//Teacher::print(&t2)
    return 0;
}
#include <iostream>
using namespace std;
class Counter{
public:
    Counter(int count=0):m_count(count){}
    void print(void){
        cout << "计数值:" << m_count << endl;
    }
    Counter& add(void){
        ++m_count;
        //this指向调用对象
        //*this就是调用对象
        return *this;//返回自引用
    }
    void destroy(void){
        //...
        cout << "destroy:" << this << endl;
        delete this;
    }
private:
    int m_count;
};
int main(void)
{
    Counter c;
    c.add().add().add();
    c.print();//3
    Counter* pc = new Counter;
    pc->add();
    pc->print();//1
    //delete pc;
    cout << "pc:" << pc << endl;
    pc->destroy();
    return 0;
   
}
#include <iostream>
using namespace std;
class Student;
class Teacher{
public:
    void edudate(Student* s);
    void reply(const string& answer);
private:
    string m_answer;
};
class Student{
public:
    void ask(const string& question,Teacher* t);
};
void Teacher::edudate(Student* s){
    s->ask("什么是this指针?",this);
    cout << "学生回答:" << m_answer << endl;
}
void Teacher::reply(const string& answer){
    m_answer = answer;
}
void Student::ask(
    const string & question,Teacher* t){
    cout << "问题:" << question << endl;
    t->reply("不知道");
}
int main(void)
{
    Teacher t;
    Student s;
    t.edudate(&s);
    return 0;
}


二、析构函数,主要负责清理对象生命周期中的动态资源,当对象被销毁时,该类的析构函数自动被调用和执行


#include <iostream>
using namespace std;
class Integer{
public:
    Integer(int i){
        m_pi = new int;
        *m_pi = i;
    }
    ~Integer(void){
        cout << "析构函数" << endl;
        delete m_pi;
    }
    void print(void) const {
        cout << *m_pi << endl;
    }
private:
    int* m_pi;
};
int main(void)
{
    if(1){
        Integer i(100);
        i.print();//100
        cout << "test1" << endl;
        Integer* pi = new Integer(200);
        pi->print();
        delete pi;
        cout << "test3" << endl;
    }
    cout << "test2" << endl;
    return 0;
}
#include <iostream>
using namespace std;
class A{
public:
    A(void){
        cout << "A(void)" << endl;
    }
    ~A(void){
        cout << "~A(void)" << endl;
    }
};
class B{
public:
    B(void){
        cout << "B(void)" << endl;
    }
    ~B(void){
        cout << "~B(void)" << endl;
    }
    A m_a;
};
int main(void)
{
    B b;
    return 0;
}
目录
相关文章
|
1月前
|
编译器 数据库连接 C++
31析构函数
31析构函数
10 0
|
5月前
|
C++
析构函数
析构函数是一种特殊的函数,用于在对象的生命周期结束时清理资源。它与构造函数相反,通常用于释放在对象创建期间分配的资源(如内存、文件句柄等)。析构函数的名称通常以一个波浪线(~)开头,如 ~MyClass()。
57 6
|
1月前
|
编译器 C语言 C++
C++构造函数,析构函数
C++构造函数,析构函数
|
2月前
|
编译器 C++
【c++】构造函数和析构函数
【c++】构造函数和析构函数
【c++】构造函数和析构函数
|
3月前
|
存储 编译器 Linux
构造函数与析构函数的问题总结
构造函数与析构函数的问题总结
41 0
|
10月前
|
搜索推荐 编译器 C++
【C++构造函数与析构函数】
【C++构造函数与析构函数】
this函数和析构函数
this函数和析构函数
54 0
|
编译器 C++
C++——this指针和析构函数
C++——this指针和析构函数
C++——this指针和析构函数
|
Java
析构函数(方法)
析构函数(方法)
58 0
什么是C++编程的构造函数与析构函数
【attribute】可用于为函数或者数据声明赋属性值。 给函数分配属性的主要目的是为了让编译程序可以优化处理。 分配给函数的属性位于函数原型的声明中。
什么是C++编程的构造函数与析构函数

热门文章

最新文章