- 博客(13)
- 收藏
- 关注
原创 深拷贝和浅拷贝
为什么会发生崩溃,我们来分析一下,首先我们的对象a实例化时会调用含参构造函数进行初始化,初始化过程中会向堆区申请空间,并且指针变量ptr还会指向申请的空间,接着我们创建b、对象并且调用默认的拷贝构造函数对b进行初始化此时会发生下面的情况。:浅拷贝就是编译器实现的直接等号复制操作,深拷贝重新申请一块空间,进行拷贝操作,所以如果对象中有属性在堆区中开辟的,一定要自己提供拷贝构造函数,防止浅拷贝带来的问题。默认的拷贝构造函数中会对对象中的变量进行简单的赋值拷贝操作,就是调用等号进行赋值,这就是浅拷贝。
2023-07-24 11:08:42
152
原创 构造函数对成员变量的初始化
最终会发现这个程序结果中a的值是一个随机值,程序并没有按照初始化列表当中那样,先初始化变量b然后用变量b的值去初始化a,而是先对a进行初始化,然后再对b进行初始化,也就是说正真的初始化顺序时按照类当中变量声明的顺序进行的,与初始化列表无关。之前我们了解到c++类当中有多个默认成员函数,其中构造函数跟析构函数是会在类实例化对象时自动调用,构造函数会对类成员变量进行初始化,析构函数会对对象的内存空间进行释放,防止出现内存泄漏等问题。例如:a(12),b(a)用初始化后的a变量来初始化b。构造函数名(参数列表…
2023-07-24 09:15:01
782
原创 C++运算符重载
运算符重载是运算符重载函数对运算符进行重载的,函数名有一个固定的模式(operator+运算符);运算符重载函数:返回类型 operator 运算符(形参列表)。运算符可以被重载成全局函数,也可以被重载成成员函数。一般更倾向于重载成成员函数。下面我们举几个简单的例子:定义一个简单的坐标类,首先我们先来实现赋值运算符=的重载,当我们实例化出来一个对象,接着想把当前对象赋值给一个新的对象。接着我们来实现+=运算符的重载。下面是-=运算符的重载。实现*=运算符的重载。
2023-04-03 01:42:08
184
原创 C++this指针
C++中通过引入this指针解决该问题,即:C++编译器给每个“非静态的成员函数“增加了一个隐藏 的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量” 的操作,都是通过该指针去访问。只不过所有的操作对用户是透明的,即用户不需要来传递,编译器自动完成。
2023-03-18 16:00:03
196
原创 c++知识点总结(部分)
在c++当中就很好的修改了这一点,c++对于函数名的修饰不单单与参数有关,而且还跟参数的数量,参数类型,以及参数类型的顺序相关联,所以说相同名字的函数在调用时会根据参数的不同从而实现函数的调用不同,所以c++允许在同一作用域当中定义参数类型不同名字相同的函数。在c/c++当中要命名大量的变量,函数,以及c++当中的类名,这些变量,函数和类的名称都将存在全局作用域当中,当命名的变量函数太多的时候,可能会导致很多冲突。我们这里创建了一个名称为N的命名空间,我们可以看到命名空间当中可以定义变量,函数,结构体。
2023-03-12 12:25:32
122
原创 C语言指针专题(初级)
引用《c和指针》这本书上的一句话“正是指针使C语言威力无穷。有些任务用其他语言也可以实现,但C语言能够更加有效地实现;有些任务无法用其它语言实现,如直接访问硬件,但C语言却可以;”
2022-11-19 12:53:18
526
原创 C语言之---无符号数据类型与有符号数据类型
C语言当中有很多整型数据类型,它们的主要区别在于取值范围。同时C语言又将这些数据类型分为两大类unsigned(无符号类)和signed(有符号类)。C语言当中以unsigned关键字来定义无符号类型变量;例如: unsigned int a=10;上面这样就是简单定义了一个无符号变量,并且对它进行初始化为10。对于有符号变量我们可以省略signed直接写成int a=10;假如说我们把一个无符号类型的变量初始化成一个负数会发生什么情况?
2022-11-10 21:19:30
3478
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人