![](https://img-blog.csdnimg.cn/bce245f3d2fe435ea9de0755899a2941.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C/C++
C++学习
w___hao
这个作者很懒,什么都没留下…
展开
-
C++中的函数重载、重写(覆盖)、隐藏
一、函数重载1、什么是函数重载 函数重载是在同一作用域内(不可以跨越类),函数名相同、参数的个数、类型、先后顺序至少有一个不同的函数被称为重载的函数。在类中const成员函数与非const成员函数也可以构成重载的关系。1、重载函数的作用: 在C++中进行函数的重载,可以解决具有功能相似但是函数参数不同导致的函数命名困难的情况。在C++中通常用来对类的构造函数进行重载。2、返回值类型与函数重载的关系: 注意:函数的返回值与函数重载没有任何关系,对,没有任何关系。函数重载要求的是函数名相同、原创 2021-03-26 06:55:33 · 492 阅读 · 0 评论 -
深拷贝、浅拷贝和深赋值、浅赋值
一、深拷贝与浅拷贝 由系统提供的默认拷贝构造函数的实现是浅拷贝,浅拷贝是简单地对成员变量逐个进行拷贝赋值,一般不需要用户自定义浅拷贝构造函数,系统会提供默认的浅拷贝构造函数。但是有时系统提供的浅拷贝构造函数是无法满足实际的编程需求的,因此可能需要用户自己定义拷贝构造函数。1、浅拷贝存在的问题 当类中包含指针型成员变量,并且在构造函数中为该指针型成员变量通过malloc函数或new运算符在内存中开辟空间时,会出现double free的现象。分析:1、浅拷贝把指针型成员变量的值拷贝赋值给同原创 2021-03-25 08:14:58 · 948 阅读 · 0 评论 -
友元、运算符的重载
一、友元函数和友元类1、友元函数 在C++中我们我们通常可以将全局函数或者类的成员函数声明为类的友元函数,这样友元函数便可以访问类对象中的私有成员。我们可以用friend关键字将其声明为友元函数。1、将全局函数声明为类的友元函数 以friend关键字声明的全局函数称为类的友元函数,友元函数可以通过类对象访问它的私有成员。可以在类内对全局的友元函数进行声明,在类外对其进行定义。(也可以在类内对全局的友元函数进行定义,此时它仍然为全局函数)。2、将一个类的成员函数声明为另一个类的友元函数原创 2021-03-25 07:49:42 · 2185 阅读 · 0 评论 -
自定义string类,并完成相应功能的实现
自定义一个String类,并完成无参构造函数、有参构造函数、拷贝构造函数、赋值运算符重载函数、析构函数“+”运算符重载函数、输入运算符重载函数、输出运算符重载函数:1、实现代码如下:运行结果如下:...原创 2021-03-24 14:06:19 · 188 阅读 · 0 评论 -
extern “c“
C++的语法进阶一、extern "C" 在C++代码中调用C编译器生成的.二进制文件时,需要用extern "c"修饰C语言函数的声明。用法:extern "c"{ #include "clib.h"}作用:告诉C++编译器按C语言的规则去链接相应的C函数。C语言编写的代码 || C代码的.h文件 #include <stdio.h> || #ifndef _HEAD_H_ || #define _HEAD_H_int add(int a, int原创 2021-03-05 10:03:37 · 72 阅读 · 0 评论 -
C/C++中const关键字剖析
C/C++中const关键字剖析一、const修饰普通变量 const修饰普通变量时是很容易理解的,就变量的值不可以改变。但是在C和C++中还是有区别的,同时const修饰的普通变量在不同的存储区域时也有不同的效果。1、C和C++中const修饰的普通变量的区别 const int val = 10; <==> int const val = 10; 上述两个变量的定义实际上是等价的,其中的const修饰的是变量val。表示变量val的值不可以进行改变,但是val的值一定就原创 2021-03-04 12:51:00 · 113 阅读 · 0 评论 -
C++的异常处理机制
C++的异常处理机制一、异常事件 程序在运行时发生了错误也叫作发生了异常事件,简称发生了异常。常见的异常事件有:除数为零、越界访问、访问空指针等。如果不在代码中针对可能出现的异常事件提供处理预案,程序可能无法运行甚至崩溃。二、异常的处理 异常处理是C++处理异常事件的一种机制,异常事件被处理后程序可以正常运行,异常处理的方法由程序员自己定义。 C++对异常事件的处理会转化为异常表达式的处理,异常表达式是一个携带异常事件信息的表达式。异常处理表达式的语法如下:throw e;//抛出异原创 2021-03-04 12:49:53 · 653 阅读 · 1 评论 -
C++多态
C++多态一、多态的介绍 C++中的多态是对现实生活多态现象的一种模拟,一个接口,多种实现。是利用同一调用形式来调用派生类和基类的同名函数。在程序中并不是通过不同的对象名去调用派生类中同名的函数,而是通过指向基类对象的指针或引用去调用它们,即一个接口,多种实现,这就是多态。多态程序的设计要点:1)父类的成员函数(接口)必须为虚函数2)子类需要重写父类所有的虚函数3)通过父类的引用或者指针调用虚方法,实现多态二、虚函数 用virtual修饰的函数被称为虚函数。无函数体(并不是函数体为空原创 2021-03-02 14:57:46 · 100 阅读 · 0 评论 -
C++继承
C++继承一、继承的基本概念 派生类继承了基类的所有数据成员和部分成员函数(除了基类的构造函数、析构函数、赋值运算符函数等),并可以对这些成员作出增加或调整。增加主要体现在派生类的新增成员上;调整主要体现在继承方式以及同名覆盖上。 声明派生类的一般形式: class 派生类类名 : 继承方式 基类类名 { 派生类新增成员表列; };二、隐藏(覆盖) 当子类中的新增成员变量或者成员函数与父类中的成员变量或者成员函数同名时,子类对象只能隐式调用子类的同名成员变量或者成员函数。原创 2021-03-02 13:34:35 · 250 阅读 · 0 评论 -
C++中类的封装
C++——类的封装一、构造函数1、利用构造函数完成对象的初始化 C++中构造函数是专门用来初始化对象的成员函数。它是一种特殊的成员函数,它不需要用户来调用,而是在建立对象的时候自动调用。 说明:1)构造函数在建立对象时被自动调用 2)构造函数名与类名相同,无返回值,一半生命为public 3)用户如果没有定义构造函数,则系统会自动生成一个。但是函数体为空,无参数、不执行 任何初始化操作(1)在构造函数的函数体内完成对象的初始化 函数首部一般为: 构造函数原创 2021-02-28 08:57:30 · 2549 阅读 · 0 评论 -
C++的名字空间
C++的名字空间 名字空间主要用于解决名字冲突的问题,应用程序可能会调用多个库程序,不同的库程序可能会存在相同的全局变量名,全局函数名,类名等。库程序的作者为了避免其他程序中名字或者用户自己定义的名字冲突,将库程序中的所有名字放在一个特定的名字空间下。这样一个标识符可以在不同的名字空间使用,提高标识符的利用率。一、名字空间的引入namespace 空间名{ 成员;}二、名字空间的用法前缀用法: 空间名::成员 <==> spaceName::member 后缀用法:原创 2021-02-02 08:25:46 · 89 阅读 · 0 评论 -
C语言中变量的作用域、生存期、存储类型、内存空间分布
C语言中变量的作用域、生存期、存储类型、内存空间分布一、变量的作用域: C语言中根据变量作用域的不同将变量分为局部变量与全局变量。 1、局部变量: 在函数体内部或者在复合语句内部定义的变量,只在函数体内部或者复合语句内部有效的变量称为局部变量。 2、全局变量: 在函数体外部定义的变量称为全局变量,全局变量可以被本文件中的其他函数所调用。它的有效作用域是从 全局变量的定义位置开始直到本源程序文件的结束。不要误认为全部变量的作用域在整个源文件内有效,那 时因为我们习惯于把全局变量定义在源文件原创 2021-01-23 13:27:13 · 4159 阅读 · 1 评论 -
运算符易错、细节总结
运算符易错、细节总结一、运算符的优先级初等运算符:[ ]、( )、->、.单目运算符:-、强制转换、++、- - 、*、&、!、~、sizeof算术运算符:先乘除,后加减位运算符中的位移运算符:<< 、>> 关系运算符:位运算符:(除位移运算符外)逻辑运算符:(除逻辑非外)条件运算符:赋值运算符:(包含赋值复合运算符)注意:1、自增、自减运算符优先级高于乘除2、->和.的优先级高于*和&3、算术运算符中的加减优先级高于位移运原创 2021-01-22 15:04:05 · 118 阅读 · 0 评论 -
C++中的类型转换问题
C++的类型转换问题 说明:该篇文章是本人作为初学者对C++中的类型转换的理解与认识,特写此文章与各位同行进行分享,互相学习。欢迎各位读者对本文章的错误之处进行留言纠错,不足之处进行留言补充。谢谢大家!一、显式转换 显式转换再这里就不再和大家讨论,因为它是我们在平时最常见得转换方式,也是最简单的转换方式。二、隐式转换在C语言中以下四种情况会进行隐式转换:1、算术运算表达式中低类型能够隐式的转换为高类型。 char、short ==> int ==> unsigned ==&g原创 2021-01-22 13:31:39 · 262 阅读 · 0 评论 -
gcc编译流程
gcc编译流程主要分为四个步骤:预处理、编译、汇编、链接。1、预处理处理源文件中以“#”开头的语句。如头文件、宏定义等语句进行处理,.c文件生成.i文件。gcc -E hello.c -o hello.i-E:只进行预处理,预处理结束后停止编译过程。-o:将结果输出到目标文件2、编译编译主要是编译器的工作,检查代码的语法结果,是否有语法错误,生成.s的汇编文件。gcc -S hello.i -o hello.s-S:生成.s的汇编文件,编译结束后停止编译流程。3、汇编将原创 2020-12-01 22:16:31 · 670 阅读 · 0 评论 -
C语言中超出范围的数据的计算方法
超出范围数据的计算方法1、无符号类型数据全部都是正数,正数的原码、反码、补码都是其本身。2、有符号数据的最高位表示符号位,0表示正数,1表示负数;负数的反码 = 符号位不变,其它位按位取反;补码 = 反码 + 1。3、数据在内存中都是以补码的形式进行存储。 首先我们将超出范围的数据以补码的形式存放在内存中。其次判断赋值变量的类型,signed或者unsigned,若为unsigned类型,则表示正数,补码 = 原码;若为signed类型,则还需进一步判断符号位,若符号位为0则表示正数,补码原创 2021-01-22 10:44:51 · 6580 阅读 · 3 评论