首页 > 代码库 > C++中拷贝构造函数
C++中拷贝构造函数
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++中拷贝构造函数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。