码迷,mamicode.com
首页 > 编程语言 > 详细

C++中拷贝构造函数

时间:2014-11-24 11:55:18      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:blog   io   ar   os   sp   文件   on   2014   log   

Dog.h文件

#include <iostream>
#include <string>
using namespace std;
#ifndef DOG_H
#define DOG_H
class Dog {
private:
	string name;
	int age;
	static int count;
public:
	void bark() {
		cout << Dog::name << " age:" <<  Dog::age << endl;
	};
	Dog() {
		cout << "deflut constractor" << endl;
	}
	Dog(string name, int age){
		Dog::name = name;
		Dog::age = age;
		Dog::count += 1;
		cout << "constractor" << endl;
	};
	Dog(const Dog & dog){
		cout << "copy constractor" << endl;
		Dog::name = dog.name;
		Dog::age = dog.age;
	}

	void changeName(string newName) {
		name = newName;
	}
	static int getCount() {
		return count;
	}
};
#endif

main函数

#include "stdafx.h"
#include <iostream>
#include "Dog.h"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
	Dog dog = { "Bob", 5 };
	Dog dog2;
	dog2 = dog;
	dog.bark();
	dog.changeName("Tom");
	dog.bark();
	getchar();
}

输出

constractor

default constractor

Bob age:5

Tom age:5

说明dog2 = dog 并没有发生拷贝,而是让dog2直接指向了dog

 如果改为Dog dog2 = dog;也就是在定义的时候直接初始化的话就会调用拷贝构造函数;

总结拷贝构造函数调用情况如下:

1:在定义对象时直接用另一个对象对其进行初始化操作时,如 S s1= s2;  S s1(s2);

2:在用类对象作为形参时,实参和形参之间传值会调用拷贝构造函数

3:在return一个对象时,函数会生成一个临时的对象,然后调用拷贝构造函数,将return的对象拷贝给临时对象返回给函数。

C++中拷贝构造函数

标签:blog   io   ar   os   sp   文件   on   2014   log   

原文地址:http://blog.csdn.net/softmanfly/article/details/41441751

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!