网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

拷贝构造函数-创新互联

C++中,系统不仅会为你提供默认构造函数同时也会为你提供默认拷贝构造函数。那么拷贝构造函数是怎么一回事呢?有这么一段代码:

10年积累的成都网站设计、成都网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有兴平免费网站建设让你可以放心的选择与我们合作。
People person  ( "chentong", 20, "student" );
People per(person);

  假设我们已经有了一个People的类,于是我们申请了一个类变量person。并且,我们对这个类变量进行了初始化。于是,我们申请了第二个类变量per,通过这种写法,我们就相当于把person中的值全部写到了per中去了。因为,默认拷贝构造函数使得两个类变量指向了同一块内存空间。默认拷贝构造函数使得per中的值指向了person中值的地址,换言之,两个类变量指向的是同一块内从空间,当释放内存空间时,可能就会对同一块内存空间进行重复释放,这样就会带来内存泄露的危害。(二次释放,有可能会把有用的值给释放掉,所以,这样做肯定是有危害的)

  为了解决二次释放带来的危害,C++允许我们自己写拷贝构造函数。一般情况下,系统会为你提供默认构造函数,但是,如果你自己写构造函数,并且是带参数的构造函数,那么,你必须得提供一个不带参数的构造函数。因为,当你自己写了带参数的构造函数,那么系统将不会为你提供默认构造函数。否则,使用将会出错。

  这一次,我们定义两个类,一个People类,一个Student类。

class People {

private:
	char* name;
	int age;
public:
	People() {

	}

	People(char* name, int age) {

		this->name = name;
		this->age = age;
		cout << "name = " << this->name << endl;
		cout << "age = " << this->age << endl;
	}

	//拷贝构造函数
	People(People& per) {

		this->name = per.name;
		this->age = per.age;
	}

	void SetName(char* name) {

		this->name = name;
	}

	void SetAge(int age) {

		this->age = age;
	}

};
class Student {

private:
	People father;//调用无参构造函数
	People mother;//调用有参构造函数
	int student_id;
public:
	Student() {

	}
        
	Student(int student_id, char* father, char* mother, int father_age = 42, int mother_age = 41){

		this->student_id = student_id;

	}

	void PrintInfo() {

		
	}

  现在我想要使用这些参数来构造我的类变量father和类变量mother。我该怎么做呢?很明显我所构造的类变量father和mother调用的都是无参构造函数,但是,我想要调用有参构造函数,我该怎么做呢?我只要,

Student(int student_id, char* father, char* mother, int father_age = 42, int mother_age = 41 ) : father ( father, father_age ), mother ( mother, mother_age )

  在构造函数参数列表的外面,加上一个冒号,然后,把相应类变量的参数传进去。那么假如我先对类变量mother进行初始化,再对类变量father进行初始化,这样会有影响吗?当然不会,初始化的前后顺序并不会影响初始化的结果。因为,我们在创建类变量时,先创建的是类变量father,然后是mother,所以,不管你先对哪个类变量进行初始化,系统都是先对father进行初始化。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


新闻名称:拷贝构造函数-创新互联
分享链接:http://bjjierui.cn/article/dgdoep.html

其他资讯