【ThinkingInC++】62、类中指针
2014-10-04 14:23
288 查看
类中指针
CopyingWithPointers.cpp/** * 书本:【ThinkingInC++】 * 功能:类中指针 * 时间:2014年10月4日14:26:19 * 作者:cutter_point */ #include "../require.h" #include <iostream> #include <string> using namespace std; class Dog { string nm; public: Dog(const string& name) : nm(name) {cout<<"Creating Dog: "<<*this<<endl;} //这里有一个类似于拷贝构造函数的函数 Dog(const Dog* dp, const string& msg) : nm(dp->nm+msg) { cout<<"Copied dog "<<*this<<" from "<<*dp<<endl; } ~Dog() {cout<<"Deleting Dog: "<<*this<<endl;} void rename(const string& newName) { nm=newName; cout<<"Dog rename to: "<<*this<<endl; } friend ostream& operator << (ostream& os, const Dog& d) { return os<<"["<<d.nm<<"]"; } }; class DogHouse { Dog* p; string houseName; public: DogHouse(Dog* dog, const string house) : p(dog), houseName(house) {} //拷贝构造函数 Dog(const string& name) : nm(name) {cout<<"Creating Dog: "<<*this<<endl;} // Dog(const Dog* dp, const string& msg) : nm(dp->nm+msg) DogHouse(const DogHouse& dh) : p(new Dog(dh.p, "copy-construct")), houseName(dh.houseName+"copy-constructed") {} //为了避免自赋值,应该这样重载operator= DogHouse& operator=(const DogHouse& dh) { if(&dh != this) { p=new Dog(dh.p, "assigned"); houseName=dh.houseName+" assigned"; } return *this; } //改掉houseName的名字 void renameHouse(const string& newName) {houseName=newName; } //得到dog这个对象 Dog* getDog() const {return p;} //析构函数 ~DogHouse() {delete p;} friend ostream& operator << (ostream& os, const DogHouse& dh) { return os<<"["<<dh.houseName<<"] contains "<<*dh.p; } }; int main() { DogHouse fidos(new Dog("Fido"), "FidoHouse"); cout<<fidos<<endl; DogHouse fidos2=fidos; cout<<fidos2<<endl; fidos2.getDog()->rename("Spot"); fidos2.renameHouse("SpotHouse"); cout<<fidos2<<endl; fidos=fidos2; cout<<fidos<<endl; fidos.getDog()->rename("Max"); fidos2.renameHouse("MaxHouse"); return 0; }
相关文章推荐
- Thinking in C++: 静态指针与指向静态类型的指针
- Thinking in C++: 静态指针与指向静态类型的指针
- Thinking in C++: Pointers to members 指向成员的指针
- Thinking in C++读书笔记--7.2指针常量
- Thinking in C++: 指针数组与数组指针
- 【ThinkingInC++】7、空指针
- Thinking in c++ exercise 4-26 关于二维数组指针
- 读书笔记--《Thinking in C++》---C/C++指针的重要区别和引用
- Thinking in C++: Pointers to members 指向成员的指针
- 【ThinkingInC++】18、指向函数的指针数组
- Thinking in C++ (1-4)
- Thinking in C++ learning(2)-----Data Abstract
- Thinking in C++ learning(1)-----C in C++
- Thinking in C++ learning(3)-----隐藏实现
- Thinking in C++ learning(3)-----隐藏实现
- Thinking again in C++(一)常量性原理
- thinking in c++ 卷2
- Thinking in C++读书笔记--5.3缺省参数
- thinking in c++ 读书笔记---集合初始化
- Thinking in C++ (1-1)