C++学习
C++学习笔记
夏微凉.
阿里云专家博主,大二在读学生,计算机科学与技术专业,热爱编程和分享知识,欢迎一起交流和学习~
展开
-
类与对象中的运算符重载
运算符重载概念:对已有的运算符进行重新定义,赋予其另一种功能,以适应不同的数据类型。注意:1.对于内置的是数据类型的表达式的运算符是不可能改变的。通常不会利用成员函数重载左移运算符,因为cout只能在右边。作用:重载关系运算符,可以让两个自定义类型对象进行对比操作。由于重载后使用的方式非常像函数的调用,因此称为仿函数。作用:通过重载递增运算符,实现自己的整形数据。总结:前置递增返回的是引用,后置递增返回值。默认构造函数(无参,函数体为空)默认析构函数(无参,函数体为空)运算符重载也可以发生函数重载。原创 2023-02-11 10:25:37 · 107 阅读 · 0 评论 -
类与对象中的友元
当内外函数访问类内私有成员属性时,编译器会提示错误,如果想要类外函数访问类内私有成员。需要在类中进行友元函数的声明。在程序里,有些私有属性也想要内外特殊的一些函数或者类进行访问,就需要用到友元技术。友元的目的就是让一个函数或者类访问另一个类中私有成员。原创 2023-02-10 08:55:40 · 45 阅读 · 0 评论 -
类与对象中const修饰成员函数
成员属性生命是加关键字mutable后,在常函数中依然可以修改。成员函数后加const后我们称这个函数为常函数。声明对象前加const称该对象为常对象。常函数内不可修改成员属性。常对象只能调用常函数。原创 2023-02-09 10:23:23 · 53 阅读 · 0 评论 -
类与对象中this指针的使用
原因是再Person的构造函数中,前后两个age是同一个变量。要想解决这个问题,有两种方法,一种是将Person类属性中的age变量名修改例如修改成m_age,避免变量名引起冲突。注意:PersonAddAge函数前必须加上“&”,表示以引用的形式进行传递。如果是值传递,返回的并不是p2的本体,而是用p2的本体创建出一份新的数据。在类的非静态成员函数中返回对象本身,可使用return *this;当然 ,this指针也可以指向被调用的成员函数所属的对象。这是我们输出的结果就正确了。原创 2023-02-09 09:23:52 · 83 阅读 · 0 评论 -
类与对象:静态成员
因为在Person类中创建的是一个静态变量,所有成员都共享一份数据,当执行p2.m_A = 200;时,p.m_A的值也会发生改变。原因:静态成员变量是所有对象共享的,如果让静态成员函数访问非静态成员变量m_B时,无法区分m_B是属于哪个对象的。静态成员函数和静态成员变量类似,可以通过对象进行访问,也可以通过类名进行访问。静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员。注意:静态成员变量和静态成员函数和普通变量一样,都有访问权限。静态成员函数只能访问静态成员变量。原创 2023-02-08 12:33:20 · 161 阅读 · 0 评论 -
类和对象中类对象作为类成员
B类中有对象A作为成员,A为对象成员,那么当创建B对象时,A和B的构造和析构的顺序是谁先谁后呢?由此可知:当其他类对象作为本类成员,构造时先构造类对象,再构造自身,析构的顺序与构造相反。C++类中的成员可以是另一个类的对象,我们称该成员为对象成员。原创 2023-02-08 11:35:43 · 136 阅读 · 0 评论 -
类和对象中的初始化列表
语法:构造函数():属性1(值1),属性2(值2).....{}C++提供了初始化列表语法,用来初始化属性。原创 2023-02-08 09:35:47 · 70 阅读 · 0 评论 -
C++类与对象中深拷贝与浅拷贝
解释:浅拷贝是一个字节一个字节的拷贝,在对身高m_Height进行拷贝时,因为m_Height是一个指针类型的变量,所以是将m_Height的地址拷贝到p2中。在析构函数中,p1,p2都会进行释放,p2先进行释放,此时将m_Height所指向的堆区内存释放。到p1进行释放时,因为m_Height不为空会再次对m_Height进行释放,但由于m_Height已经被p2释放了(堆区内存重复释放),所以会引发错误。深拷贝:在堆区重新申请空间,进行拷贝操作。浅拷贝:简单的复制拷贝操作。此时代码就没有出现错误了。原创 2023-02-08 09:08:17 · 137 阅读 · 0 评论 -
C++中构造函数调用规则
如果将15~19行代码删掉,再次调用test01函数时,编译器会自动给我们提供拷贝构造函数,这个函数内只会执行“m_Age=p.m_Age;当编译器执行这段代码时,由于这段代码写了有参构造函数,而在test02中“Person P”没有提供参数,编译器也不提供默认构造函数,因此代码会出错。1.如果用户定义了有参构造函数,c++不在提供默认无参构造,但是会提供默认拷贝构造函数。1.如果我们写了有参构造函数,编译器就不再提供默认构造,依然提供拷贝构造。默认拷贝构造函数,对属性进行值拷贝。原创 2023-02-07 09:13:52 · 119 阅读 · 0 评论 -
C++ 构造函数的分类及调用
在Person p2=Person(10)中,Person(10)是一个匿名对象。匿名对象的特点是:当前行执行结束后,系统会立即回收掉匿名对象。注意事项:调用默认构造函数时,不要加(),因为下面这行代码编译器会认为是一个函数的声明,不会认为在创建对象。注意事项:不要利用拷贝构造函数初始化匿名对象,编译器会认为Person(p3)===Person p3;按参数分:有参构造和无参构造。按类型分:普通构造和拷贝构造。三种方法中括号法最简单。原创 2023-02-06 12:10:42 · 62 阅读 · 0 评论 -
字符串函数strncmp
函数为字符串比较函数 ,功能是将str1和str2进行比较,最多比较n个字节。若str1与str2的前n个字符相同,则返回0;若s1大于s2,则返回大于0的值;若s1 小于s2,则返回小于0的值。要比较的字符包括字符串结束标志'\0',而且一旦遇到'\0'就结束比较。在abc和efg中a的acsll值小于e,函数返回-1。-- 要进行比较的第一个字符串。-- 要进行比较的第二个字符串。-- 要比较的最大字符数。原创 2023-02-04 22:34:28 · 3297 阅读 · 0 评论 -
C++中的引用
c++中的引用原创 2023-02-04 22:12:52 · 66 阅读 · 0 评论 -
C++:new和delete的用法
上面我们用“new int[10];堆区开辟的数据,由程序员手动开辟,手动释放,释放利用操作符。利用new创建的数据,会返回该数据对应的类型的指针。栈区:函数的形参,非静态的局部变量。delete运算符使用的一般格式为。例如要撤销上面用new开辟的空间用。堆区:用于程序运行时动态内存分配。在堆区利用new开辟数组。操作符在堆区开辟数据。原创 2023-02-03 22:40:54 · 859 阅读 · 0 评论