标签:3.1 结果 def 测试 span 编译 fine void 技术
在定义任何C++类时,拷贝空置操作都是必要部分,类需要控制拷贝、赋值和销毁对象时发生的行为。拷贝构造函数的用途:当创建了一个新对象时,可以用另一个对象的数据初始化这个新建的对象。
如果在程序中我们没有显示定义拷贝构造函数,则C++会为每个类隐式地提供一个缺省的拷贝构造函数,不过就算我们显示定义了拷贝构造函数,程序同样也会自己合成一个默认的构造函数。缺省的构造函数简单地将参数对象的每个数据域复制给对象中相应的副本。拷贝构造函数和赋值运算符是相似的,它们把一个对象的值赋给另一个对象,但两者不一样!使用拷贝构造函数将创建新的对象,而使用赋值运算符则不会创建新对象。比如下面的例子:
//circle.h #ifndef _CIRCLE_H_ #define _CIRCLE_H_ class Circle{ public: Circle(); Circle(double radius); ~Circle(); void setRadius(double radius); double getRadius(); double getArea(); private: double radius; }; #endif //circle.h
#include "circle.h" #include <iostream> Circle::Circle(){ radius = 1; } Circle::Circle(double radius){ this->radius = radius; } void Circle::setRadius(double radius){ this->radius = radius; } double Circle::getRadius(){ return radius; } double Circle::getArea(){ return 3.14159 * radius * radius; } Circle::~Circle(){ }
测试函数main:
#include <iostream> #include "circle.h" using namespace std; int main(){ Circle c1(99); Circle c2(c1); //这里没有显示定义拷贝构造函数,编译器就隐式调用了一个 cout << "The c1 radius is " << c1.getRadius() << " and area is " << c1.getArea() << endl; cout << "The c2 radius is " << c2.getRadius() << " and area is " << c2.getArea() << endl; return 0; }
运行结果如下(我们发现两个Circle对象c1和c2数据域都是一样的):
“浅拷贝”指的是拷贝指针的地址,不拷贝该指针指向的内存内容;“深拷贝”指的是拷贝指针指向的内存内容,不拷贝指针本身。程序隐式生成的拷贝构造函数和赋值运算符进行对象复制采用的是一种所谓的“浅拷贝”。
继续更新。。。
标签:3.1 结果 def 测试 span 编译 fine void 技术
原文地址:http://www.cnblogs.com/mocuishle/p/7617995.html