- 博客(17)
- 收藏
- 关注
原创 继承(二)
构建顺序:先构建基类,再构建派生类。析构顺序 刚好与构造顺序相反。派生类的构造函数只能调用缺省的基类的构造函数,如果没有,就要指明(显式的写出)。构建顺序并不是按照初始化列表构建的,先去按继承顺序构建继承来的,然后再按定义的顺序构建自己的。
2024-08-12 19:22:59
239
原创 继承(一)
继承的层次结构:C++通过类派生的机制来支持继承。被继承的类称为基类或超类,新产生的类为派生类或子类。基类和派生类的集合称作继承层次结构。设计形式为:class 派生类名: 访问限定符 基类名1,访问限定符 基类名2...private:public:(如果没有访问限定符默认私有继承)公有继承是“是一个”的意思派生反映了事物之间的联系,事物的共性和特性之间的关系。派生与独立设计若干相关的类,前者 工作量少,重复的部分可以从基类继承来,不需要单独编程。继承是类型设计层面的复用。
2024-08-10 18:14:38
790
原创 友元和静态
静态成员必须要在类外进行初始化,不能写在构造 函数中。因为静态成员只用初始化一次。在函数体内也不行,因为我们只声明了,并没有定义。改成这样才可以:将上述代码中的num定义成公有的可以.访问,直接访问,但是不可以::num访问。因为num是类域中的而不是全局域里面的。
2024-08-09 18:31:35
801
原创 移动构造和移动赋值
首先,想上述代码中的yhpinghello这个字符串常量存储在只读数据区(.rdata)。这是这个代码的调用图和运行结果可以发现,这对堆区的骚扰很严重,所以可以进行移动构造和移动赋值。
2024-08-05 16:23:33
373
原创 MyString(智能指针与深拷贝浅拷贝)
首先进入主函数会给主函数分配一个栈,然后向下执行到func函数,会给func函数分配一个栈,然后给形参x分配一个空间,x的值为10,然后我们定义了一个ip对象(这里的ip不是指针,看清楚),然后给ip分配一个空间,对象ip中会有一个成员ptr,然后我们进入Int的构造函数(首先从堆区申请一个空间来构建Int对象,并初始化为10,然后把地址给ip中的ptr指针),这是ptr指向Int对象。然后我们 调动->的重载。
2024-08-03 20:22:09
431
原创 C++运算符的重载
11、运算符重载其实是一种特殊的函数重载必须定义一个函数,告诉C++编译器,当遇到该重载运算符时调用此函数。这个函数叫做运算符重载函数,通常为类的成员函数。一般格式:返回值类型 类名::operator重载的运算符(参数表){.......}2、operator是关键字。它与重载的运算符一起构成函数名。因函数名的特殊性,C++可以将这类函数识别出来。3、运算符重载函数名必须为 关键字operator加一个合法的运算符。在 调用该函数时,将右操作数作为函数的实参。
2024-08-01 17:43:00
1262
原创 类与对象(4)
以上这两个函数是 算重载函数的,因为this的不同。但是用const修饰返回值时不可以作为重载的依据。这个程序是无法编译通过的,因为b无法调用Value函数,虽然已经在最后加了const表示常方法 ,但是以引用的返回没有常性,这相互矛盾。系统会说无法将const int转化为左值引用,因为你返回的value是个右值。可以将这个函数改成这样 就可以了。但是我们只可以对其取值,不可以改变它的值,因为是常对象。vector(顺序链表)
2024-07-31 11:55:08
403
原创 C++类型补充
在直接进行a=x的话是行不通的,这时会调用构造函数创造一个不具名的对象,把x的值给不具名对象,再用不具名对象给a赋值。我们只能访问的是对象,而不是类型,只能给对象空间。打印的是20.这里是逗号表达式,取后面的值,因为y已经有初始值了,所以会将y的值赋给x,所以打印出来就是20.在构造函数和拷贝构造函数中的冒号代表初始化,但在对象的其他成员函数不能再二次构建。只有构造函数,拷贝构造函数可以用冒号进行初始化,普通函数是不可以的。这里类型强转必须是单参,但是构建不具名对象不要求必须是单参。
2024-07-24 20:49:13
209
原创 可见性生存期、拷贝构造函数与声明和定义的区别
使这个方法既可以适用于普通对象也可以适用于常对象,使这个方法的普适性增加。当这个函数只读不写的时候就可以把函数定义成常方法。声明是用来告诉编译器变量的名称和类型,而不分配内存。例如:语句 extern int Value;表示 Value 在别的文件中已经定义,提示编译器遇到此变量时在其它模块中寻找其定义。语句 extern int b = 10;表示定义了变量 b,这一点需要注意。注意:即使是 extern ,如果给变量赋值了,就是定义了。定义是为了给变量分配内存,可以为变量赋初值。
2024-07-23 21:47:19
1012
原创 C++类的设计与成员 数据
访问限定符有三种,public(公共的),private(私有的),protected(保护的)。第一种说明的成员能从外部进行访问,另外两种说明的成员不能从外部进行访问。每种说明符可在类体中使用 多次。它们的作用域是从该说明符出现开始到下一个说明符之前或类体结束之前结束。如果在类体起始点无访问说明符,系统默认定义为私有(private)(struct默认为公有)。函数在类内声明和定义和在类内 声明类外定义是有一点区别的。在类内声明和定义系统会默认你是内联函数,类外定义不是内联。
2024-07-19 19:23:58
204
原创 C++基础入门(6)
decltype是识别类型,用于定义,和sizeof相当,但不用来计算大小,也不用像auto一样定义初始值。它是对括号里的表达式推导。这里x是10,因为推导在编译时进行,不执行代码,只是推导出类型为int。如果表达式返回的是参与运算的值本身,是引用类型类型的名字和表达式中名字相一致如果返回的是一个亡值,就是引用,如果是一个具体存在的值,就是它本来的值。
2024-07-18 20:12:34
216
原创 C++基础入门(4)
两者 extern 和 extern"C"有点区别:extren 在C和C++中,都表示声明语句的意思;而 extern"C"是按C语言方式去编译文件;extern"C"只能在C++文件使用,extern在C和C++都可以使用在 函数前面加上extern"C":函数名以C的方式进行修饰约定规则extern"C++":函数名以C++的方式进行修饰约定规则。
2024-07-16 20:11:59
1963
原创 C++入门(3)inline函数与缺省参数
缺省参数可以有多个,但所有的缺省参数必须放在参数表右侧,即先定义所有的非缺省参数,再定义缺省参数。一般情况下,函数调用时的实参个数与形参相同,但为了更方便地 使用函数,C++也允许定义具有缺省参数的函数,这种函数调用时,实参个数可以与形参不相同。当函数功能简单,使用频率很高,为了提高效率,直接将函数的代码镶嵌到程序中。这样的函数在调用时,对于缺省参数,可以给出实参值,也可以不给出参数值。当程序执行函数调用时,系统要建立栈空间,保护现场,传递参数以及控制程序执行的转移等等,这些工作需要系统时间和空间的开销。
2024-07-15 11:13:44
569
原创 C++基础入门(1)
初始化概念后直接跟{},统一进行初始化。()的初始化与{}的初始化区别在这段代码运行结果中不会出现sum这个变量,但会出现num这个变量。sum会被认为是函数声明。{}具有更强的指向性,对于程序要求会更加严格。这段代码可以编译通过,只是b的值为12.而这段代码会报错,因为{}具有更强的指向性。
2024-05-20 20:36:17
1846
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人