深拷贝和浅拷贝! 拷贝构造函数的几个用途: 1:用对象赋值创建时; 2:当作值参数传递时; 3:当作返回值时; 编译器只调用最低一级的拷贝构造函数,如果未指定的话,只调用其父类和更高极类的默认构认函数。 #include "stdafx.h" #include <string.h> #include <iostream> using namespace std; const int cObjectNameLength = 32; class Animal { public: Animal () { cout << "Construct an animal..." << endl; strcpy(this->name, ""); this->age = 0; Animal::s_count++; } Animal (const Animal& src) { cout << "Copy construct an animal..." << endl; Animal::s_count++; } void SetName(const char* name) { strncpy(this->name, name, cObjectNameLength); } void SetAge(int age) { this->age = age; } virtual void Eat() { cout << "Animal eat..." << endl; } protected: char name[cObjectNameLength]; int age; public: static int s_count; }; class Dog : public Animal { public: Dog () { cout << "Construct a dog..." << endl; } Dog (const Dog& src) { cout << "Copy construct a dog..." << endl; } virtual void Eat() { cout << "Dog eat bone..." << endl; } protected: public: }; int _tmain(int argc, _TCHAR* argv[]) { Dog d1; d1.SetName("Puppy"); d1.SetAge(11); Dog d2(d1); d2.Eat(); return 0; } int Animal::s_count = 0; ///