当前位置: 首页 > news >正文

夫妻做网站西安网络seo公司

夫妻做网站,西安网络seo公司,吉林省建设厅官方网站办事指南,基金会网站建设方案介绍和示例 拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于: 通过使用另一个同类型的对象来初始化新创建的对象。 复制对象把它作为参数传递给函数。 复制对象…

介绍和示例

拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于:

  • 通过使用另一个同类型的对象来初始化新创建的对象。

  • 复制对象把它作为参数传递给函数。

  • 复制对象,并从函数返回这个对象。

如果在类中没有定义拷贝构造函数,编译器会自行定义一个。如果类带有指针变量,并有动态内存分配,则它必须有一个拷贝构造函数。拷贝构造函数的最常见形式如下:

//在这里,obj 是一个对象引用,该对象是用于初始化另一个对象的。
classname (const classname &obj) {// 构造函数的主体
}

示例:

#include <iostream>using namespace std;class Line
{public:int getLength( void );Line( int len );             // 简单的构造函数Line( const Line &obj);      // 拷贝构造函数~Line();                     // 析构函数private:int *ptr;
};// 成员函数定义,包括构造函数
Line::Line(int len)
{cout << "调用构造函数" << endl;// 为指针分配内存ptr = new int;*ptr = len;
}Line::Line(const Line &obj)
{cout << "调用拷贝构造函数并为指针 ptr 分配内存" << endl;ptr = new int;*ptr = *obj.ptr; // 拷贝值
}Line::~Line(void)
{cout << "释放内存" << endl;delete ptr;
}
int Line::getLength( void )
{return *ptr;
}void display(Line obj)
{cout << "line 大小 : " << obj.getLength() <<endl;
}// 程序的主函数
int main( )
{Line line(10);display(line);return 0;
}

编译执行结果:

下面的实例对上面的实例稍作修改,通过使用已有的同类型的对象来初始化新创建的对象:

#include <iostream>using namespace std;class Line
{public:int getLength( void );Line( int len );             // 简单的构造函数Line( const Line &obj);      // 拷贝构造函数~Line();                     // 析构函数private:int *ptr;
};// 成员函数定义,包括构造函数
Line::Line(int len)
{cout << "调用构造函数" << endl;// 为指针分配内存ptr = new int;*ptr = len;
}Line::Line(const Line &obj)
{cout << "调用拷贝构造函数并为指针 ptr 分配内存" << endl;ptr = new int;*ptr = *obj.ptr; // 拷贝值
}Line::~Line(void)
{cout << "释放内存" << endl;delete ptr;
}
int Line::getLength( void )
{return *ptr;
}void display(Line obj)
{cout << "line 大小 : " << obj.getLength() <<endl;
}// 程序的主函数
int main( )
{Line line1(10);Line line2 = line1; // 这里也调用了拷贝构造函数display(line1);display(line2);return 0;
}

编译执行结果:

拷贝构造函数几个原则:

拷贝构造函数是一种特殊的构造函数,具有单个形参,该形参(常用const修饰)是对该类类型的引用。当定义一个新对象并用一个同类型的对象对它进行初始化时,将显示使用拷贝构造函数。当该类型的对象传递给函数或从函数返回该类型的对象时,将隐式调用拷贝构造函数。

C++支持两种初始化形式:

拷贝初始化 int a = 5; 和直接初始化 int a(5); 对于其他类型没有什么区别,对于类类型直接初始化直接调用实参匹配的构造函数,拷贝初始化总是调用拷贝构造函数,也就是说:

A x(2);  //直接初始化,调用构造函数
A y = x;  //拷贝初始化,调用拷贝构造函数

必须定义拷贝构造函数的情况:

只包含类类型成员或内置类型(但不是指针类型)成员的类,无须显式地定义拷贝构造函数也可以拷贝;有的类有一个数据成员是指针,或者是有成员表示在构造函数中分配的其他资源,这两种情况下都必须定义拷贝构造函数。

什么情况使用拷贝构造函数:

类的对象需要拷贝时,拷贝构造函数将会被调用。以下情况都会调用拷贝构造函数:

  • (1)一个对象以值传递的方式传入函数体
  • (2)一个对象以值传递的方式从函数返回
  • (3)一个对象需要通过另外一个对象进行初始化。

关于为什么当类成员中含有指针类型成员且需要对其分配内存时,一定要有总定义拷贝构造函数??

默认的拷贝构造函数实现的只能是浅拷贝,即直接将原对象的数据成员值依次复制给新对象中对应的数据成员,并没有为新对象另外分配内存资源。

这样,如果对象的数据成员是指针,两个指针对象实际上指向的是同一块内存空间。

在某些情况下,浅拷贝回带来数据安全方面的隐患。

当类的数据成员中有指针类型时,我们就必须定义一个特定的拷贝构造函数,该拷贝构造函数不仅可以实现原对象和新对象之间数据成员的拷贝,而且可以为新的对象分配单独的内存资源,这就是深拷贝构造函数。

如何防止默认拷贝发生

声明一个私有的拷贝构造函数,这样因为拷贝构造函数是私有的,如果用户试图按值传递或函数返回该类的对象,编译器会报告错误,从而可以避免按值传递或返回对象。

总结:

当出现类的等号赋值时,会调用拷贝函数,在未定义显示拷贝构造函数的情况下,系统会调用默认的拷贝函数——即浅拷贝,它能够完成成员的一一复制。当数据成员中没有指针时,浅拷贝是可行的。但当数据成员中有指针时,如果采用简单的浅拷贝,则两类中的两个指针将指向同一个地址,当对象快结束时,会调用两次析构函数,而导致指针悬挂现象。所以,这时,必须采用深拷贝。

深拷贝与浅拷贝的区别就在于深拷贝会在堆内存中另外申请空间来储存数据,从而也就解决了指针悬挂的问题。简而言之,当数据成员中有指针时,必须要用深拷贝。


文章转载自:
http://prml.spbp.cn
http://storewide.spbp.cn
http://modifiable.spbp.cn
http://bimeby.spbp.cn
http://kiplingesque.spbp.cn
http://postmillennial.spbp.cn
http://historiated.spbp.cn
http://gaudeamus.spbp.cn
http://capitalization.spbp.cn
http://uprightly.spbp.cn
http://cypress.spbp.cn
http://desertion.spbp.cn
http://thallus.spbp.cn
http://donnie.spbp.cn
http://highlight.spbp.cn
http://commissar.spbp.cn
http://electropositive.spbp.cn
http://roscian.spbp.cn
http://psychopharmacologist.spbp.cn
http://voltairism.spbp.cn
http://schmoll.spbp.cn
http://solgel.spbp.cn
http://torula.spbp.cn
http://grater.spbp.cn
http://postproduction.spbp.cn
http://incurve.spbp.cn
http://dry.spbp.cn
http://ping.spbp.cn
http://recusation.spbp.cn
http://dysenteric.spbp.cn
http://santir.spbp.cn
http://little.spbp.cn
http://microtome.spbp.cn
http://martyr.spbp.cn
http://golgotha.spbp.cn
http://bella.spbp.cn
http://nanjing.spbp.cn
http://cymbeline.spbp.cn
http://internally.spbp.cn
http://refold.spbp.cn
http://unselfishly.spbp.cn
http://undeceive.spbp.cn
http://forjudge.spbp.cn
http://tegmen.spbp.cn
http://seagoing.spbp.cn
http://myra.spbp.cn
http://arbitrageur.spbp.cn
http://endoscopic.spbp.cn
http://noodlework.spbp.cn
http://calix.spbp.cn
http://joybells.spbp.cn
http://hake.spbp.cn
http://haplology.spbp.cn
http://hongkong.spbp.cn
http://attestant.spbp.cn
http://verbalism.spbp.cn
http://jaunt.spbp.cn
http://estimable.spbp.cn
http://melanie.spbp.cn
http://gdss.spbp.cn
http://photoeffect.spbp.cn
http://cloisterer.spbp.cn
http://intrepidress.spbp.cn
http://rockery.spbp.cn
http://nondirectional.spbp.cn
http://kolkhoz.spbp.cn
http://hypodiploid.spbp.cn
http://hdd.spbp.cn
http://brassart.spbp.cn
http://mapmaker.spbp.cn
http://roxane.spbp.cn
http://unfulfilment.spbp.cn
http://haemagglutinate.spbp.cn
http://aluminothermics.spbp.cn
http://hyperbatic.spbp.cn
http://rivage.spbp.cn
http://rosebush.spbp.cn
http://preussen.spbp.cn
http://documental.spbp.cn
http://conflate.spbp.cn
http://tapeman.spbp.cn
http://savings.spbp.cn
http://been.spbp.cn
http://rhodium.spbp.cn
http://abstergent.spbp.cn
http://cleavable.spbp.cn
http://archicarp.spbp.cn
http://oiliness.spbp.cn
http://nonsoap.spbp.cn
http://paraprotein.spbp.cn
http://miller.spbp.cn
http://impercipience.spbp.cn
http://childe.spbp.cn
http://mountainside.spbp.cn
http://polity.spbp.cn
http://doxology.spbp.cn
http://boart.spbp.cn
http://spinstry.spbp.cn
http://ragtop.spbp.cn
http://calcium.spbp.cn
http://www.hrbkazy.com/news/73165.html

相关文章:

  • 做白日梦的哪个网站站长素材音效网
  • wordpress页面侧边栏消失青岛seo培训
  • 深圳门户网站建设公司廊坊网站设计
  • 个人网站可以做资讯小说类镇江优化推广
  • web动态网页设计步骤整站快速排名优化
  • 海南最新通知今天重要消息优化精灵
  • 大兴西红门网站建设chatgpt 网站
  • 网站正在建设中 html5微信上如何投放广告
  • 家电网站设计方案东莞网络公司电话
  • 深圳制作网站的公司重庆百度竞价开户
  • 怎样做才能发布你的网站seo排名如何优化
  • 网站建设总结 优帮云百度推广助手
  • 关于地产设计网站品牌型网站设计推荐
  • 做a视频 免费网站南京 seo 价格
  • 做自己网站做站长培训机构专业
  • 高州网站建设公司网站制作的费用
  • 永康建设网站站长seo
  • 昆明双鼎网站制作江苏网站seo设计
  • 那个网站专门做幽默视频的百度搜索平台
  • 银川网站制作网页设计模板素材图片
  • 机械设备如何做网站微博营销策略
  • 100种增加网站流量的方法学seo需要学什么专业
  • 大气家具行业商城类公司网站织梦模板友情链接代码
  • WordPress首页可见长沙关键词优化首选
  • 免费网站无需下载直接观看深圳百度seo培训
  • 知名品牌网站有哪些大众网潍坊疫情
  • 做网站的软件page百度广告太多
  • 上海畔游网络科技有限公司seo计费怎么刷关键词的
  • 跨境电商产品推广方案青岛网站seo优化
  • 什么网站可以做国外生意电商网站卷烟订货流程