![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++prime plus
文章平均质量分 94
哆啦刘小洋
努力思考
展开
-
C++之转换函数
Stonewt(double llbs)是构造函数,这个构造函数只接受一个参数,可以作为转换函数,和通常的转换函数不一样,这里实现的是从普通类型到类类型的转换。和转换构造函数(仅仅接受一个参数的构造函数)一样,转换函数提供执行自动,隐式转换的函数所存在的问题是:在用户不希望进行转换的时候,它却转换了。那么如果只有一个转换函数,编译器就不会报错,但是不管有几个转换函数,最好还是使用强制转换!那么有了这个声明之后,就只能使用强制转换来调用这些函数了,就不能隐式转换了!如果不适用强制类型转换,会怎么样?原创 2022-10-12 23:41:20 · 2648 阅读 · 0 评论 -
C++primeplus p462-p482
所有的模板都要这样开头:class是变量的类型名Type是变量名称template是告诉编译器,将要定义一个模板。attention:1.使用class并不意味着Type必须是一个类,只是说明Type是一个通用的类型说明符。可以使用typename来替换他以免混淆。2.Type只是一个参数名,可以用自己喜欢的名称代替它。常见的命名是T。原创 2022-09-30 00:07:11 · 368 阅读 · 0 评论 -
C++primeplus P392-P415
public :public :. . . }如果这样使用,会出现问题://可以//不可以为什么会这样呢?因为实际上trump对象的虚函数表将基类的同名函数隐藏了(该函数不在函数表中),各玩各的。重新定义继承的方法不是重载。如果重新定义派生类的函数,将覆盖所有基类同名的函数。如果重新定义继承的方法,应确保与原来的原型完全相同。但是如果返回类型是基类引用或者指针,则可以修改为指向派生类的引用或者指针。这叫返回类型协变。因为允许返回类型随类类型的变化而变化。举个例子:{原创 2022-09-06 22:29:40 · 406 阅读 · 0 评论 -
C++primeplus P368-P391
通常,new负责在堆中找到一个足以满足要求的内存块。new运算符还有另一种变体,被称为定位new运算符。功能:可以指定要在内存中的位置存放数据。//先定义两个double类型的指针 p1 = new double [ 100 ];//开辟一个内存空间:(1)大小为100个double (2)p1指向这个空间的起始位置 p2 = new(buffer) double [ 100 ];原创 2022-08-22 18:46:02 · 389 阅读 · 0 评论 -
C++primeplusp(p356-386)
如果要将一个类型转换为另一个类型,一般使用构造函数+赋值函数来实现。有一个类对象Stonwt , 想要将一个 double 类型变量转换为Stonwt类型变量,很显然C ++ 不能默认做到这种事情,所以需要接受 double 类型参数的构造函数 Stonwt(double a);//转换函数,构造函数 Stonwt mycat;//建立一个对象 mycat = 19.8;//将double类型转换为Stonwt类型只接受一个参数的构造函数才能作为转换函数,两个参数不行。...原创 2022-08-18 14:11:59 · 301 阅读 · 0 评论 -
c++primeplusP310-P343
第一个操作数是Time类对象,可能这时候会疑惑为什么operator * (double x)里面只有一个参数,这是因为,重载函数是类成员函数,参数列表里面可以忽略类对象参数,而在该函数实现中,直接使用this指针,this指针指向调用函数的对象。也就是说,类成员函数能访问类的私有数据,而普通函数不能,但是如果该函数是类的友元,那么这个普通函数就也可以访问类的私有数据了。那么为了解决这个问题,就必须使用非成员函数,这样就可以自定义操作数的顺序,但是这又引发了一个问题,非成员函数不能访问类的私有数据。...原创 2022-08-11 12:55:57 · 416 阅读 · 0 评论 -
C++primeplus p247-277
头文件包含结构声明和使用这些结构的函数的原型(声明函数)实际上,我们如果要自己写一个头文件,那么头文件里面最好不要有函数的定义,和变量的声明,否则会产生错误。而正确的做法是,在头文件里面包含函数的声明,而函数的定义放在另一个cpp文件里面。那么就简单的知道了,一个头文件和一个实现头文件的.cpp文件是配套使用的。头文件不定义函数,只声明函数那么如何创建头文件呢?很简单,下面是我自己写的。首先建立一个头文件然后建立一个一样名字的cpp文件来定义头文件声明的函数最后用一个源程序测试测试结果上面可以说是很简单原创 2022-07-22 10:43:01 · 417 阅读 · 0 评论 -
6.16-6.18C++primeplus(p230-p245)
函数模板就是一个函数的模板,就像一个模具,你可以用不同的颜料,材料填充它,但是不管选的什么材料,什么颜料,它的形状是不变的。这个模具就是函数的模板。那么很清楚了,如果函数的功能一样(模具),但是参数不一样(颜料),那么就可以使用函数模板,换一个参数即可。下面再说。函数模板允许以任意类型的方式来定义函数。例如:第一行指出,要建立一个模板,并将类型命名为Anytype。关键字template和typename是必需的,除非可以使用关键字class代替typename。类型名可以自己选择,这里是”Anytype原创 2022-06-17 23:33:08 · 185 阅读 · 0 评论 -
6.14C++primeplus(P208-P230)
C++为了程序的运行速度,添加了“内联函数”。那么内联函数和常规函数有什么区别呢?常规调用函数:执行调用函数,操作指针将会跳转到该函数的内存地址,执行函数代码,执行完毕后,操作指针将会跳转回来。如果函数调用次数多,那么指针的来回跳跃会导致浪费时间。调用内联函数:如果将函数声明为内联函数,那么编译器将使用相应的函数代码替换函数调用,这样操作指针就不需要跳来跳去,直接执行函数代码即可。但是这样会浪费一定的空间。毕竟要将调用函数都替换为函数代码。什么时候使用内联函数:首先,如果执行函数代码的时间比处理函数调用机原创 2022-06-16 21:09:23 · 515 阅读 · 2 评论 -
6.6-6.7C++primeplus P137-P166
if else语句是C和C++里面的基本语法,非常重要。注意一下if和else的控制范围。值得一提的是,什么才算作一句话?很显然,在汉字中,一个句号结尾就是一句话,那么在C++中,一个‘;’结尾就算一句话结束。所以,再来说,如果一个if后面接了不只一句话,那么需要大括号2.逻辑表达式C++的逻辑表达式有三种:逻辑OR(||),逻辑AND(&&),逻辑NOT(!)(1)逻辑OR(||)or的意思就是’或‘,当两个或两个以上的条件中有一个条件满足某个要求的时候,就用or,意思是,只要有一个条件是tr原创 2022-06-09 03:12:14 · 751 阅读 · 2 评论 -
C++primeplus复习p92-p136
(1)自动存储在函数内部定义的变量使用自动存储空间,被称为自动变量(也叫局部变量),为什么说自动,也就是说,他们在所属函数内部被调用的时候自动开辟空间生成,在该函数生命周期结束的时候自动消亡,该空间被释放。比如上面程序的a,当test函数结束的时候,这个a就从内存消失了。自动变量(局部变量)存储在栈空间中,这侧面说明了几点。根据栈的特性;(2)静态存储静态存储是整个程序执行期间都存在的存储方式。有2种方法来声明静态变量;(3)动态存储new和delete运算符提供了一种比自动变量和静态变量更加灵原创 2022-06-05 16:03:52 · 168 阅读 · 1 评论 -
6.3c++primeplus总结(p62-p91)
字符串是定义在内存的连续字节中的一系列字符。字符串有两种风格:1.字符串越界问题 学过c的都知道,当我们需要存储一个字符串的时候,一般会这样定义:首先,我们定义的是14个字符空间,而“i am a student"一共也是14个字符,但是运行程序会发现,该字符串的长度是54,并且输出字符串:i am a student烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫?峫?会出现这种情况的原因是什么?答案是,在初始化str字符串的时候结尾没有赋予字符串结束字符’\0’。 在计算机内部,处理字符串是这样的:从数组开头原创 2022-06-04 21:09:15 · 405 阅读 · 0 评论