欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

类中的多种构造函数

发布时间:2025/3/21 编程问答 45 豆豆
生活随笔 收集整理的这篇文章主要介绍了 类中的多种构造函数 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

构造函数术语:

            1. 默认构造 : 指的是没有形参的构造函数, 由编译器默认提供, 在某些场合编译器需要自动调用一个类对象的构造函数时, 只能调用默认构造.例如: 子类继承了父类,当子类对象被构造的时候, 父类                     的构造也会被自动调用,此时就只能自动调用父类的默认构造

            2.默认构造函数:没有形参,方法体也是空的,目的是构造一个对象

MyClass.h文件class MyClass{public :MyClass();}; MyClass.cpp文件#include "MyClass.h"MyClass::MyClass(){}

     2. 转换构造 : 指的是那些只有一个形参,且参数类型是非本类类型的构造函数们. 一般能够显式调用 (例如 `MyClass obj(5)`), 也能隐式调用: `fun(5);` fun的形参是`MyClass`类型 

MyClass.h文件class MyClass{public :MyClass(int i);MyClass(double i);private :double m_Num; }; MyClass.cpp文件#include "MyClass.h"MyClass::MyClass(int i){//构造函数中可以什么都不实现}MyClass::MyClass(double n){//构造函数中也可以实现对成员变量的赋值this->m_Num = n;} main.cpp文件int main(){//创建出MyClass的对象//方法1:MyClass myclass(5);//方法2:MyClass myClass = 5.0;//此时编译器会将 MyClass myClass = 5.0;装换成 MyClass myclass(5.0); return 0;}

 3. 拷贝构造: 指的是只有一个形参, 且参数类型是本类类型的引用. 一般是在定义一个对象的时候, 将另一个对象作为初始值时,就会自动调用这个版本的构造函数, 一般编译器会默认提供一个拷贝                  构造, 默认提供的拷贝构造会将对象的内存空间进行拷贝.

MyClass.h文件class MyClass{public :MyClass();MyClass(MyClass& myclass); private:char* cStrName;}; MyClass.cpp文件#include "MyClass.h"MyClass::MyClass(MyClass& myclass){//注意:拷贝构造的形参一定要是对象的引用,如果不是引用那么就会导致拷贝构造不断调用拷贝构造//当前就为拷贝构造函数//拷贝构造函数被调用的时机//1.当某个函数的形参是MyClass类型时//例: int FunMyClass(MyClass myclass){ }//2.当Myclass对象给另一个MyClass对象赋值时//例: MyClass myClass1;// MyClass myClass2 = myClass1;//3.当函数返回值是MyClass类型时://例: MyClass CreateMyClass(){ MyClass myClass; return myClass;}}MyClass::MyClass(){//无参构造函数}//深拷贝和浅拷贝的区别//1.一般在类中存在指针时就必须使用深拷贝MyClass::MyClass(MyClass& myClass){//浅拷贝 //仅仅进行简单赋值,将当前指针保存的内存地址赋值给新的对象。如果此时旧对象调用析构,那么旧对象的成员变量指针指向的内存空间也会被释放,那么这时新对象再去找该空间时就找不到,从而引发程序异常this->cStrName = myClass.cStrName;}//2.深拷贝MyClass::MyClass(MyClass& myClass){//深拷贝时对新指针一定要指向重新创建出的空间,并将旧空间的数据存入新的空间中str_name = _strdup(test.str_name);//_strdup()是string.h中的一个函数,作用是重新创建一块内存空间,内存空间的大小就是实参的空间大小,并且将值赋值给新创建的内存空间}

 类中包含有指针成员的时候, 一般就需要自己编写拷贝构造, 实现对指针指向的内存进行拷贝的                    功能. 否则默认拷贝构造是不会去拷贝指针指向的内容. (深拷贝和浅拷贝的区别)

            4. 带参构造 : 含有两个以上的形参的构造函数统称带参构造.

MyClass.h文件class MyClass{public:MyClass(int i,int j);}; MyClass.cpp文件#include "MyClass.h"MyClass::MyClass(int i ,int j){//带参构造函数}

 

总结

以上是生活随笔为你收集整理的类中的多种构造函数的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。