C/C++
文章平均质量分 81
C/C++知识点
Crazy_Rabbits239
这个作者很懒,什么都没留下…
展开
-
C++初阶:类和对象(五)const成员、&重载、static成员、友元、匿名对象、再谈构造函数
在上面的代码的运行结果中,我们可以看到d1调用了无const修饰的Print函数,而d2调用了有const修饰的Print函数,然后我们将无const修饰的Print函数注释后,再运行程序,发现d1调用了有const修饰的Print函数,这说明编译器会根据传入的指针类型的不同来进行合理的选择,这也印证了一点,const修饰同名函数可以构成函数重载。在前面,我们都是称其{}内的内容为对对象进行初始化,但是这并不是准确的,只能说我们通过{ }内的内容对对象的属性进行了赋值的操作。友元分为:友元函数和友元类。原创 2024-03-14 18:33:47 · 1098 阅读 · 1 评论 -
C++入门:关键字、命名空间、C++输入输出和缺省参数
定义命名空间需要使用namespace关键字,然后打一个空格接命名空间的名称,再接一对花括号{},最后在花扩号里面填写命名空间的成员。//这是一个创建命名空间的实例代码int x = 10;int age;int x = 10;int age;一个项目内是可以定义同名的命名空间的,编译器在编译的阶段会将同名的命名空间合并(如果位置在头文件,你需要将头文件引入),但是并不建议在同名的命名空间中定义同名的变量,这会导致重定义的情况发生。原创 2024-02-27 16:54:48 · 1042 阅读 · 2 评论 -
C++初阶:string类模拟实现
本节内容主要针对的是在STL之前的string类的实现,通过模拟实现string类的一些功能来更好地使用string。原创 2024-03-25 19:03:13 · 467 阅读 · 0 评论 -
C++入门:函数重载与引用
/定义引用,只需要在类型后面加&就行了int& b = a;//引用是可以多重引用的,c是b的别名,b是a的别名,那么c是a的别名int& c = b;return 0;诶,如果我定义一个新变量,给它赋值,不也能达成效果吗?但是这浪费了内存空间,说到内存空间,那我们来观察一下叭。可以看到,a、b、c三个变量的地址是相同的,更加说明了引用是不会开辟新的空间的。公式:类型& 引用变量名(对象名) = 引用实体;原创 2024-02-27 21:38:28 · 638 阅读 · 0 评论 -
C语言操作符详解(2)
2.结合性:如果两个运算符优先级相同,优先级没办法确定先计算哪个了,这时候就看结合性了,则根据运算符 是左结合,还是右结合,决定执⾏顺序。⼤部分运算符是左结合(从左到右执⾏),少数运算符是右结合(从右到左执⾏),⽐如赋值运算符( = )。单⽬操作符的特点是只有⼀个操作数,在单⽬操作符中只有&(取地址)和*(解引用)没有介绍,这2个操作符,我们放在学习指针的时候学习。上⾯⽰例中, * 和 / 的优先级相同,它们都是左结合运算符,所以从左到右执⾏,先计算 5 * 6 , 再计算 6 / 2。原创 2023-12-22 22:26:42 · 359 阅读 · 1 评论 -
C++初阶:类和对象(四)运算符重载与日期类Date的实现
在本节,我将通过实现日期类Date的实现来进一步阐释运算符重载的内容。原创 2024-03-11 18:54:22 · 214 阅读 · 1 评论 -
C++初阶:vector类的模拟实现(含模板)
【代码】C++初阶:vector类的模拟实现(含模板)原创 2024-04-04 21:22:53 · 349 阅读 · 0 评论 -
C++进阶:继承
1.继承的概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保 持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。原创 2024-04-20 19:01:59 · 877 阅读 · 0 评论 -
C++初阶:类和对象(一)——类的创建与使用
class Name//类体:由成员变量和成员函数组成//分号是不可以省略的成员函数如果在类中定义,编译器可能会将其处理为内联(inline)函数int num;(2)类声明之后,类中函数在类外定义,此时需要加上::域限定作用符int num;在一般的情况下,我们更推荐采用第二种做法,便于适应日后工程化编程的需求。原创 2024-03-04 17:43:31 · 1194 阅读 · 1 评论 -
C++进阶:多态
如果基类的析构函数为虚函数,此时派生类析构函数只要定义,无论是否加virtual关键字, 都与基类的析构函数构成重写,虽然基类与派生类析构函数名字不同(其实也可以理解为编译器对基类和派生类的析构函数进行了一定的特殊处理,统一函数名为destructor)。虚函数的继承是一种接口继承,派生类继承的是基类虚函数的接口,目的是为了重写,达成 多态,继承的是接口。派生类中有一个跟基类完全相同的虚函数(即派生类虚函数与基类虚函数的 返回值类型、函数名字、参数列表完全相同),称子类的虚函数重写了基类的虚函数。原创 2024-04-26 14:17:41 · 755 阅读 · 0 评论 -
C++初阶:类和对象(二)——构造函数和析构函数
但是main函数中不能直接调用Time类的析构函数,实际要释放的是Date类对象,所以编译器会调用Date类的析构函数,而Date没有显式提供,则编译器会给Date类生成一个默认的析构函数,目的是在其内部调用Time类的析构函数,即当Date对象销毁时,要保证其内部每个自定义对象都可以正确销毁main函数中并没有直接调用Time类析构函数,而是显式调用编译器为Date类生成的默认析构函数。而_t是Time类对象,所以在d销毁时,要将其内部包含的Time类的_t对象销毁,所以要调用Time类的析构函数。原创 2024-03-07 19:23:34 · 685 阅读 · 0 评论 -
C语言表达式求值
在平常的代码练习中,我们已经能对同类型的值进行加减乘除操作,可能也对某些不同类型的值有了一定的尝试。今天这篇文章将会讲解不同类型值运算时发生的变化。原创 2024-02-24 15:19:11 · 907 阅读 · 0 评论 -
C语言操作符详解(1)
16进制的数字每⼀位是0~9,a ~f 的,把0~9,a ~f 的数字,各⾃写成2进制,最多有4个2进制位就⾜够了,⽐如 f 的⼆进制是1111,所以在2进制转16进制数的时候,从2进制序列中右边低位开始向左每4个2进制位会换算⼀个16进制位,剩余不够4个⼆进制位的直接换算。2进制和10进制是类似的,只不过2进制的每一位的权重,从右到左是:2的0次方,2的1次方,2的2次方……有符号整数的三种表⽰⽅法均有符号位和数值位两部分,2进制序列中,最⾼位的1位是被当做符号 位,剩余的都是数值位。原创 2023-12-21 16:06:45 · 843 阅读 · 0 评论 -
C++初阶:浅识内存管理
int main()// new/delete 和 malloc/free最大区别是 new/delete对于[自定义类型]除了开空间还会调用构造函数和析构函数free(p1);delete p2;// 内置类型是几乎是一样的// Cfree(p3);delete p4;free(p5);return 0;原创 2024-03-20 18:45:57 · 399 阅读 · 0 评论 -
C++初阶:初识模板
class 类模板名// 类内成员定义// 动态顺序表// 注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具public:// 使用析构函数演示:在类中声明,在类外定义。~Vector();// 注意:类模板中函数放在类外进行定义时,需要加模板参数列表。原创 2024-03-20 18:05:46 · 791 阅读 · 0 评论 -
C++初阶:类和对象(三)——拷贝构造函数和运算符重载
观察上述代码,为了区分前置++与后置++,C++研发者规定了需要在后置++的参数列表中添加一个int型形参,在隐式使用时不需要传入参数,但是如果是显示调用时,需要手动补齐参数(运算符重载不允许使用缺省参数),下面的截图是前置++,你可以在()随便写一个值使其成为后置++。编译是成功的,诶,同拷贝构造函数一样,当只是涉及到值拷贝的时候,编译器自动生成的赋值运算符重载是足够的,但是当涉及到申请资源的时候,就会和拷贝构造函数一样,程序会崩溃啦~在下一节中,我将会通过日期类的实现来进一步地体现已有的类成员函数。原创 2024-03-10 19:03:11 · 1037 阅读 · 1 评论 -
C++入门:内联函数、auto关键字(C++11)与for循环(C++11)
当在同一行声明多个变量时,这些变量必须是相同的类型,否则编译器将会报错,因为编译器实际只对第一个类型进行推导,然后用推导出来的类型定义其他变量。// 该行代码会编译失败,因为c和d的初始化表达式类型不同。原创 2024-03-02 14:12:14 · 889 阅读 · 0 评论 -
C语言函数递归
函数不返回,函数对应的栈帧空间就⼀直占⽤,所以如果函数调⽤中存在递归调⽤的话,每⼀次递归 函数调⽤都会开辟属于⾃⼰的栈帧空间,直到函数递归不再继续,开始回归,才逐层释放栈帧空间。上面是一段简单的递归代码,注意的是我们通常不会调用main函数,因为这会造成一定的麻烦,比如上面的代码,会造成栈溢出(Stack overflow),而且在某些环境下是不能调用main函数的,这个例子是在VS2022的环境下测试的。这样的思路就是把⼀个较⼤的问题,转换为⼀个与原问题相似,但规模较⼩的问题来求解的。原创 2023-12-20 19:05:57 · 967 阅读 · 0 评论