首页 > 代码库 > 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隐式指针讨论
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。