C++盲区
逆旅可好
这个作者很懒,什么都没留下…
展开
-
深拷贝与浅拷贝
浅拷贝是创建一个新的对象,其中包含了原始对象中的一部分数据,例如列表或字典中的元素对象,但这些元素对象本身仍然是原对象的引用。因此,对于元素对象的修改会反映在原对象和浅拷贝对象中。在拷贝构造函数中,类中有一个指针变量,如果在堆区开辟指针指向的数据,再进行浅拷贝的话,拷贝后的对象的指针同样指向源对象的堆区数据,在执行析构函数后会进行释放,两个对象均释放会报错!深拷贝则是指在复制对象时,不仅复制对象本身的值,还复制了对象包含的所有子对象,即新对象与原对象完全独立,对新对象的任何修改都不会影响原对象。原创 2023-03-22 11:21:49 · 149 阅读 · 2 评论 -
构造函数的调用规则
总之,构造函数是在对象创建时自动调用的特殊函数,用于初始化对象的成员变量。在定义构造函数时,必须遵循特定的规则,以确保对象的正确初始化。在构造函数中,可以使用初始化列表对成员变量进行初始化,也可以在函数体中使用赋值语句进行初始化。如果没有显式定义构造函数,则编译器会提供一个默认的构造函数,该构造函数不接受任何参数。如果显式定义了构造函数,则必须在其中初始化所有成员变量,否则它们将包含未定义的值。构造函数不返回任何值,因为它们的主要目的是初始化对象。当创建一个对象时,会自动调用该对象的构造函数。原创 2023-03-22 10:31:21 · 839 阅读 · 0 评论 -
拷贝构造函数为什么要传入引用
在拷贝构造函数中,如果我们将参数作为值传递,那么会发生对象复制,这将导致无限递归的调用,因为拷贝构造函数的调用需要创建一个新对象并将其初始化为另一个对象的副本。用MyClass 类实例对象obj2,后面的(obj1)是告诉编译器调用拷贝构造函数,值传递会不断调用构造函数,我们不能控制,因为值传递时会把obj1赋值給临时变量,并调用拷贝构造函数,不断往复。将d1的值传递给dd1,因为是值传递,一旦调用又要产生临时变量ddd1,将d1的值传递给临时变量ddd1,那么问题就很明显了,(我们的本意,最终目的。原创 2023-03-21 18:06:21 · 1508 阅读 · 0 评论 -
指针传参与数组传参对外部数组的修改
【代码】指针传参与数组传参对外部数组的修改。原创 2023-03-20 22:59:17 · 77 阅读 · 0 评论 -
new关键字的理解
已经指向了数组的末尾,而非数组的首地址。因此,释放内存时应该使用指向数组首地址的指针,而不是指向数组末尾的指针。new关键字在堆区创建一个地址并放入初值,delete之后指针指向的地址中的内容被清空,指针指向随机地址;在程序中有一个错误:在使用循环输出 arr 数组中的元素后,使用。或者不使用指针,而使用数组下标进行赋值:、原创 2023-03-20 20:00:12 · 172 阅读 · 0 评论 -
指针传参的目的
可以修改外部数据的值。如果外部数据不可修改,为防止误操作,则需要加入const关键字。相比于值传递的数据复制,指针传参只创建了一个指针,可以节省空间;有struct student *p结构体指针;两者都是常量指针即指针所指向的为常量;原创 2023-03-20 16:11:36 · 114 阅读 · 0 评论 -
Widget::Widget(QWidget *parent)为什么要传入父级指针?
同时,我们也可以通过Ui::Widget命名空间中的成员函数来实现对UI文件中定义的控件和布局的操作和控制,如ui->setupUi()函数就是将UI文件中定义的控件和布局加载到当前窗口对象中的函数。在Qt中,当我们使用ui->setupUi(this)时,this表示当前窗口类的实例对象,也就是将UI文件中的控件和窗口元素加载到当前窗口类的实例对象中。在UI文件中,我们可以定义窗口界面中的控件和布局等元素,而Ui::Widget命名空间中则包含了这些元素的定义和实现。this代表当前类的实例对象。原创 2023-03-17 16:30:11 · 1742 阅读 · 0 评论 -
QSerialPort *serialPort;怎么理解
但是并没有为该变量分配内存空间。在使用该变量之前,需要先为其分配内存空间,通常使用类似于。由于该变量是一个指针,因此需要使用动态内存分配来为其分配内存空间,通常使用。类是Qt框架中提供的串口通信类,它允许我们在应用程序中通过串口与外部设备通信。类时,需要先声明该类的对象,然后再调用该对象的方法来进行串口通信的设置和数据传输。运算符来表示该变量是一个指针,即该变量存储的是一个内存地址,该地址指向。是一行C++代码,它的意思是声明了一个指向。因此,该行代码的作用是声明了一个指向。在该行代码中,使用了。原创 2023-03-16 22:19:22 · 545 阅读 · 0 评论 -
c++中::和.区别
"."用于访问类的非静态成员。在类中定义的静态变量可以被所有类对象共享,它们的内存空间只在程序启动时分配一次,并且可以在类的成员函数之外进行初始化。与普通变量不同,静态变量的生命周期与程序的整个运行期间相同,它们在程序开始运行时被初始化,在程序结束时被销毁。需要注意的是,"."只能用于访问对象的成员,而"::"可以用于访问类和命名空间的静态成员,也可以用于访问全局作用域的变量和函数。在C++中,"::"和"."都是用于访问类的成员(包括成员函数和成员变量)的运算符,但它们有一些重要的区别。原创 2023-03-15 18:42:46 · 2002 阅读 · 0 评论 -
函数形参为字符指针数组char* a[]怎么理解
因此,当函数形参为字符指针数组时,这个函数可以接受一个指向字符指针数组的指针,也就是一个指向字符串数组的指针,然后可以对这个字符串数组进行操作。在C语言中,字符指针是指向字符数组的指针,因此字符指针数组就是一个由多个字符指针组成的数组。在上面的示例中,通过循环遍历字符指针数组中的每个字符串,并通过第二个循环处理每个字符串中的每个字符。是等价的,它们都表示字符指针数组中的第一个元素,也就是一个指向字符串的指针。,表示字符指针数组中的第一个元素所指向的字符串的第一个字符,即 "h"。原创 2023-03-15 17:35:20 · 881 阅读 · 0 评论 -
C++中的双冒号::
在C++中,可以使用命名空间来避免名称冲突。如果在不同的命名空间中有同名的函数或变量,则需要使用双冒号运算符来指定使用哪个命名空间中的函数或变量。在C++中,如果要在类的定义外部定义或实现成员函数或静态成员变量,则必须使用双冒号运算符来引用类作用域中的成员。例如,如果有一个类叫做。在C++中,双冒号(::)被用作作用域解析运算符。在上面的示例中,我们使用双冒号运算符来引用。命名空间作用域解析运算符。命名空间中的变量和函数。原创 2023-03-15 16:21:11 · 3840 阅读 · 0 评论