首页 > 代码库 > C++学习之路: class的this隐式指针讨论

C++学习之路: class的this隐式指针讨论

class内部的成员函数是不需要把 自己的 privata元素传入的。因为系统已经通过this指针帮我们传入了。

#include <iostream>#include <string>#include <vector>using namespace std;/* * 本例错误的原因是:set系列函数返回的是对象 * 所以返回时产生了一个临时的对象 */class Student{    public:        Student()            :id_(0), name_(""), age_(0)        {            cout << "构造Student" << endl;        }        ~Student()        {            cout << "销毁Student" << endl;        }        Student setId(int id)        {            id_ = id;            return *this;        }        Student setName(const string name)        {            name_ = name;            return *this;        }        Student setAge(int age)        {            age_ = age;            return *this;        }        void print(ostream &os) const        {            os << id_ << " " << name_ << " " << age_ << endl;        }    private:        int id_;        string name_;        int age_;};int main(int argc, const char *argv[]){    Student s;    s.setId(11).setName("zhangsan").setAge(88).print(cout);    //此处通过值拷贝返回了3个局部对象 {id_= 0, Name_ = "", age_ = 0}    s.print(cout);                                             //传入给setId() 返回一个拷贝 ①{id_= 11, Name_ = "", age_ = 0} 
//
传入给setName() 值拷贝返回一个局部对象②{id_= 11, Name_ = "zhangsan", age_ = 0}
                                                               //传入给setAge() 值拷贝返回一个局部对象③{id_= 11, Name_ = "zhangsan", age_ = 88} 
                                                               
return 0; }
构造Student11 zhangsan 88销毁Student销毁Student销毁Student11  0销毁Student//结果打印了销魂了3个局部变量

综上,如果不通过返回引用的方式return s,成员函数其实返回的是一个拷贝的副本, 上面我们已经分析过了一共调用了3次成员函数,共返回了3个局部对象, 它们的作用域,是相继屏蔽的。

作用域的知识可以参考c与指针、

C++学习之路: class的this隐式指针讨论