码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2014-09-22 14:42:02      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   os   ar   div   sp   on   

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; }
构造Student
11 zhangsan 88
销毁Student
销毁Student
销毁Student
11  0
销毁Student

//结果打印了销魂了3个局部变量

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

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

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

标签:style   blog   color   io   os   ar   div   sp   on   

原文地址:http://www.cnblogs.com/DLzhang/p/3985800.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!