C++中的六个函数

C++中的六个函数 一、构造函数在C中构造函数是六个函数中的第一个当一个对象被创建时在它的整个周期中是一个由生到死的过程即构造函数创建对象析构函数析构对象。在对象被创建时调用构造函数创建一个对象这是对象的创建过程。在C中当你创建一个对象时需要调用构造函数创建对象在类中有默认的构造函数当然你也可以去使用构造函数去创建对象对数据进行初始化。看下面的例子12345678910111213141516classBase{public:Base(){}Base(inta0):num(a){}Base(inta0,intb0):num(a),age(b){}Base(inta0,intb0,doublec0.0):num(a),age(b),slaroy(c){}private:intnum;intage;doubleslaroy;};在上面的构造函数中构造函数必须与类名相同构造函数是无类型的第一个构造函数是默认的构造函数第二个构造函数是只对一个数据成员进行初始化其它的数据成员是随机值。第二个构造函数是对两个数据成员进行初始化其它的数据成员为随机值。第三个构造函数是对所有的数据成员进行初始化。二、析构函数在C中构造函数是创建一个对象时那么析构函数则是这个对象由生到死的死亡过程。同时析构函数也在析构对象时可以将已经分配的内存空间进行回收。123456789101112131415161718192021classBase{public:Base(){}Base(){pnewchar[strlen(default)1];strcpy(p,default);}~Base(){if(p ! NULL){delete[] p;pNULL;}}private:char*p;};析构函数如上所示它无类型、无参数、无返回值如果在构造对象时没有进行空间的开辟内存的分配时那么析构函数如同默认的析构函数一样如果进行了内存的分配时当一个对象被析构时同时还要对其所分配的内存进行回收否则就会造成内存泄漏。三、拷贝构造函数在C中如果在构造函数中有申请内存的操作且在其他函数中出现对象的拷贝那么就会需要拷贝构造函数。1234567891011121314151617181920212223242526272829303132classBase{public:Base(){}Base(){pnewchar[strlen(default)1];strcpy(p,default);}Base(constBase s){pnewchar[strlen(s.p)1];strcpy(p,s.p);}~Base(){if(p ! NULL){delete[] p;pNULL;}}private:char*p;};intmain(){Base a;Base b(a);return0;}由于在主函数中出现了对对象的拷贝赋值那么就需要拷贝构造函数如果没有拷贝构造函数则会使用默认的拷贝构造函数那么此时进行的是浅拷贝那么会产生析构函数对内存重复释放的错误。那么此时就需要进行深拷贝操作重新编写拷贝构造函数对对象进行拷贝赋值。而在编写拷贝构造函数时要注意参数必须是“”引用传递否则则是语法错误。四、赋值函数在C中赋值函数为第四个函数如果在构造函数中有申请内存的操作且在其他程序中有两个对象直接或间接进行赋值操作就需要赋值函数。123456789101112131415161718192021222324252627282930313233343536373839404142classBase{public:Base(){}Base(){pnewchar[strlen(default)1];strcpy(p,default);}Base(constBase s){pnewchar[strlen(s.p)1];strcpy(p,s.p);}Base operator(constBase s){if(sthis)return*this;delete[] p;pnewchar[strlen(s.p)1];strcpy(p,s.p);return*this;}~Base(){if(p ! NULL){delete[] p;pNULL;}}private:char*p;};intmain(){Base a,c;Base b(a);ca;return0;}由于在主函数中进行了对象的赋值操作如果没有对“”运算符进行重载定义则会产生两次释放同一个内存的操作的错误。在“”重载操作中如果涉及到指针操作则必须判断两个对象是否为同一个对象即自赋值操作否则当进行释放指针的操作时就可能产生错误。然后要用delete释放原有的内存资源否则将造成内存泄漏。五、对一般对象的取址函数在C中对一般对象的取址函数为第五个函数。12345678classBase{public:Base* operator(){returnthis;}};在一般对象的取址函数是直接返回该对象的地址则为取其地址。六、对常对象的取址函数在C中对常对象的取址函数为第六个函数。12345678classBase{public:constBase* operator()const{returnthis;}};复制讲解在常对象的取址函数也是直接返回该常对象的地址则为取其地址