C++学习笔记
主要供个人学习使用
惊鸿.Jh
这个作者很懒,什么都没留下…
展开
-
C++异常处理
程序使用异常处理程序(exception handler)来捕获异常,异常处理程序位于要处理问题的程序中。处理程序以关键字catch开头,随后是位于括号中的类型声明,它指出了异常处理程序要响应的异常类型;try块标识其中特定的异常可能被激活的代码块,它后面跟一个或多个catch块。try块是由关键字体示的,关键字try的后面是一个由花括号括起的代码块,表明需要注意这些代码引发的异常。其中try块用于检测代码块,若发现异常则通过throw引发异常并标识异常(throw后面的值即为异常特征),指出异常语句。原创 2022-09-15 13:51:40 · 405 阅读 · 0 评论 -
再探C++中类继承问题:
1.关于类继承中对象指针的问题:首先,基类的指针和引用可以在不经过显式转换的情况下指向派生类的对象,但是却无法通过基类的指针调用派生类对象的非基类方法。但是,无法将派生类的指针指向基类对象,这种关系只是单向存在的。同理,c++的切片可以将派生类对象赋值给基类,此种关系也是单向存在的。2.虚函数的工作原理:首先,需要明确,C++存在将派生类引用或指针转化为基类引用或指针,这称为向上强制转化(upcasting), 这种特性,在一定程度上保障了为基类设计的函数可以完美的契合于派生类,但是在某个方面也可能会造成一原创 2022-07-13 18:00:18 · 248 阅读 · 0 评论 -
友元函数细节
1.为类重载二元运算符时(带两个参数的运算符),常常使用友元运算符,例如Time对象的乘法运算: 与加减运算符不同的是,乘法运算符使用了两个不同的类型,由于左侧操作数为调用函数,若使用成员函数的话,乘法交换律将不复存在,例如 A=B*2.75成立,等价于 A=B.operator*(2.75);但 A=2.75*B将无法操作。 故而想解决这个问题正确的方法是使用友元函数,且对*运算符进行重载,使得支持乘法交换律。 对于非成员重载运算符函数来说,运算符表达式左边的操作数对应于运算符函数的第一个参数,运算原创 2022-05-18 16:41:04 · 89 阅读 · 0 评论 -
STL专题
STL专题原创 2022-05-17 13:18:23 · 212 阅读 · 0 评论 -
C++面向对象细节
1.模板函数不能作为虚函数,因为模板动态联编的特性决定了无法确定虚函数表的大小。 2.子类的构造、析构函数会调用基类的赋值构造析、构函数处理基类的部分。 3.如果在类声明中定义了方法(内联定义)则可省去函数头的模板。 4.子类成员与父类重名时,会覆盖父类。 ..................原创 2022-05-13 14:02:35 · 50 阅读 · 0 评论 -
12.动态内存和类分配的问题
1.对于类成员为字符串类型的,在类声明使提供字符串指针而并非数组,意在便于后续初始化和调用时,通过new运算符,实现可变长度(也可直接使用string类)。 2.初始化在cpp文件中,而不是在类声明文件,因为类声明位于头文件中,后续可能多次调用,防止出现多个初始化语句副本,而引发错误。(但对于const静态成员和枚举类型例外,可直接在类声明中初始化)。类声明中不分配内存,仅描述内存如何分配。 3.慎重将对象作为函数参数,自动生成的拷贝构造函数为浅拷贝,易造成内存泄漏的问题,需重载拷贝构造函数。 4.如原创 2022-05-13 12:40:25 · 58 阅读 · 0 评论 -
c++11特性解析
仅当lambda表达式完全由一条返回语句组成时,自动推导才有效,否则,需使用新增的返回类型后置语法: [] (double x)->double{int y=x; return x-y;};原创 2022-05-09 19:17:27 · 47 阅读 · 0 评论