本文共 3189 字,大约阅读时间需要 10 分钟。
#include#include using namespace std;class HasPtr{public: HasPtr() = default; HasPtr(int value,string * pointer); HasPtr(int); HasPtr(string *); HasPtr(HasPtr &); ~HasPtr(); void output(); int value_; string * pointer_;};HasPtr::HasPtr(int value,string * pointer) :value_(value){ pointer_ = new string(*pointer);}HasPtr::HasPtr(int value):value_(value) { pointer_ = new string;}HasPtr::HasPtr(string *pointer):value_(0) { pointer_ = new string(*pointer);}HasPtr::HasPtr(HasPtr &another_HasPtr) { value_ = another_HasPtr.value_; pointer_ = new string(*another_HasPtr.pointer_);}HasPtr::~HasPtr() { delete pointer_;}voidHasPtr::output() { cout << "value_: " << value_ << ", pointer point to : " << *pointer_ << endl;}voidf(void){ string s1("I was a quick wet boy,diving too deep for coins."); string s2("All of your street light eyes,wide on my plastic toys."); HasPtr ptr1(19,&s1); ptr1.output(); HasPtr ptr2(20); ptr2.output(); HasPtr ptr3(&s2); ptr3.output(); HasPtr ptr4(ptr3); ptr4.output(); s2 = "Then when the cops closed the fair,I cut my long baby hair."; ptr4.output();}intmain() { f(); return 0;}
输出
value_: 19, pointer point to : I was a quick wet boy,diving too deep for coins.
value_: 20, pointer point to : value_: 0, pointer point to : All of your street light eyes,wide on my plastic toys. value_: 0, pointer point to : All of your street light eyes,wide on my plastic toys. value_: 0, pointer point to : All of your street light eyes,wide on my plastic toys.可见,改变s2之后,并不会影响到ptr4.
对程序做一点修改,使其行为像一个指针
#include#include using namespace std;class HasPtr{public: HasPtr() = default; HasPtr(int value,string * pointer); HasPtr(string *); HasPtr(HasPtr &); ~HasPtr(); void output(); int value_; string *pointer_;};HasPtr::HasPtr(int value,string * pointer) :value_(value),pointer_(pointer){}HasPtr::HasPtr(string *pointer):value_(0),pointer_(pointer){}HasPtr::HasPtr(HasPtr &another_HasPtr) { value_ = another_HasPtr.value_; pointer_ =another_HasPtr.pointer_;}HasPtr::~HasPtr() {}voidHasPtr::output() { cout << "value_: " << value_ << ", pointer point to : " << *pointer_ << endl;}voidf(void){ string s1("I was a quick wet boy,diving too deep for coins."); string s2("All of your street light eyes,wide on my plastic toys."); string * py = &s1; HasPtr ptr1(19,&s1); ptr1.output(); HasPtr ptr3(&s2); ptr3.output(); HasPtr ptr4(ptr3); ptr4.output(); s2 = "Then when the cops closed the fair,I cut my long baby hair."; ptr3.output(); ptr4.output();}intmain() { f(); return 0;}
输出
value_: 19, pointer point to : I was a quick wet boy,diving too deep for coins.
value_: 0, pointer point to : All of your street light eyes,wide on my plastic toys. value_: 0, pointer point to : All of your street light eyes,wide on my plastic toys. value_: 0, pointer point to : Then when the cops closed the fair,I cut my long baby hair. value_: 0, pointer point to : Then when the cops closed the fair,I cut my long baby hair. 可以看出当s2改变之后,ptr3和ptr4都跟着改变。因为这两个对象内的指针都指向s2
转载地址:http://sqvmi.baihongyu.com/