C++ Person类示例程序以及深拷贝和浅拷贝
2017-03-06 18:19
260 查看
#include "iostream" #include "string.h" using namespace std; class Person { public: Person(const char *name,int age); ~Person(); void setName(const char *name); void setAge(int age); char* getName(); int getAge(); void display(); Person(const Person &a); //拷贝构造函数 private: char *m_name; int m_age; }; Person::Person(const char *name,int age)//构造函数 注:这里加const是因为参数是字符串是常量,不可修改的。不然会有警告 { m_name = new char; if(m_name != NULL) { strcpy(m_name,name); m_age = age; } } Person::~Person() //析构函数 { delete m_name; } void Person::setName(const char *name) //设置名字 注:这里加const是因为参数是字符串是常量,不可修改的。不然会有警告 { strcpy(m_name,name); } void Person::setAge(int age) //设置年龄 { m_age = age; } int Person::getAge() //返回年龄 { return m_age; } char* Person::getName() //返回名字 注:这里返回char *类型的指针,返回的m_name是名字字符串的第一个地
{ 但是可能是因为Cout就将整个字符串直到遇到'\0'打印出来了 ,类似于C语言中printf中 的%s %c的区别
return this->m_name;
}
Person::Person(const Person &a) //拷贝构造函数 { m_name = new char; //注:虽然是拷贝,但是这里是深拷贝,所以要再new一个新的对象名字空间 strcpy(m_name,a.m_name); m_age = a.m_age; } void Person::display() //打印函数 { cout<<m_name<<' '<<m_age<<endl; } //主函数 int main() { Person p1("zhaoyu",20); p1.display(); Person p2(p1); p2.setName("liwei"); p2.display(); p1.display(); }
注:浅拷贝是用缺省拷贝构造函数实现的:
可以看出上面浅拷贝的时候他们的资源(私有成员)是共用的;
深拷贝与浅拷贝 **什么是深拷贝?什么是浅拷贝? **答:深拷贝与浅拷贝不同的是对于引用的处理,深拷贝将会 在新对象中创建一个新的和原始对象中对应字段相同(内容 相同)的字段,也就是说这个引用和原始对象的引用是不同 的,我们改变新对象中的这个字段的时候是不会影响到原始 对象中对应字段的内容。 ** 缺省拷贝构造函数是采用浅拷贝即位拷贝(bitwise copy) 的方式对一个对象进行初始化的。 |
相关文章推荐
- c++中深浅拷贝以及写时拷贝的实现示例代码
- 一段C++的程序,指针大小的,以及__LINE__,__FILE__两个宏
- C++本质:类的赋值运算符=的重载,以及深拷贝和浅拷贝
- Qt的国际化示例程序以及步骤--实现Qt程序的动态切换语言功能
- C++拷贝构造函数(包括默认拷贝构造函数以及深拷贝、浅拷贝)
- 深入分析C++中char 和char [], char* 的区别,以及程序的栈和堆内存分配
- 一个C++程序的示例(STATIC,FRIEND)
- 深度剖析一个典型的C/C++程序的编译、链接以及执行的过程
- 面向对象程序设计(C++) 示例程序——集合类
- 1Java程序通过JNI调用本地C++_第一个示例_HelloWorld
- [C/C++] C语言文件读写示例程序 xcb
- C++中文字符数组示例程序
- C++ 标准库 vector list map 基本使用方法 示例程序
- C++程序示例
- c++ 程序互斥算法(文件锁以及互斥锁)
- C++本质:类的赋值运算符=的重载,以及深拷贝和浅拷贝
- c/C++编译的程序占用的内存以及More Effective C++ 条款1:指针与引用的区别
- c++ 函数重载示例程序
- C++本质:类的赋值运算符=的重载,以及深拷贝和浅拷贝
- [C/C++] C语言文件读写示例程序 xcb