随笔分类 -  面试/算法

摘要:大学里学C++时老师都说不建议使用三元表达式,虽然很简洁,但是会产生一些问题。 其中的一个问题就是三元表达式中":"两边的对象必须是相同类型的。 这其实本质上是从类型安全角度上考虑做出如此设计的,但是C++本身又不是类型安全的,因此惯性思维容易出错。 阅读全文
posted @ 2022-01-13 11:49 Kisen 阅读(130) 评论(0) 推荐(0)
摘要:标答: int a = 0,b = 1; a = a + b; b = a - b; a = a - b; 阅读全文
posted @ 2022-01-13 11:34 Kisen 阅读(34) 评论(0) 推荐(0)
摘要:重载指在同一个类中,可以有一组具有相同函数名,不同参数列表的函数。 重写指在继承中,子类对基类中的虚函数进行重新实现,函数名、参数表皆不可改变 重定义指在继承中,子类对基类中的普通函数进行重新实现,函数名、参数表皆不可改变 因此,重写和重定义最大不同就是目标函数是否是虚函数。 阅读全文
posted @ 2022-01-13 11:23 Kisen 阅读(210) 评论(0) 推荐(0)
摘要:一般来说,就是向上类型转化过程中,派生类被截成只有基类相同的部分。 比如类cat是继承类animal,animal里只有一个成员变量weight;cat里有继承的成员变量weight,另外还有成员变量catkind以及一个函数shout();现在有一个函数f(animal xxx);这个函数接收一个 阅读全文
posted @ 2022-01-12 12:59 Kisen 阅读(150) 评论(0) 推荐(0)
摘要:简答: 缺省的构造函数 拷贝的构造函数 析构函数 赋值运算符 取址运算符 取址运算符const 阅读全文
posted @ 2022-01-12 01:40 Kisen 阅读(41) 评论(0) 推荐(0)
摘要:标答: 两个数,a,b; return (a+b + |a - b|)/2 结束 阅读全文
posted @ 2022-01-12 01:22 Kisen 阅读(50) 评论(0) 推荐(0)
摘要:一般来说,C++中return 所返回的对象有三类: 值 引用 指针 当返回指针或引用时要注意绝对不能是指向栈空间的指针或者引用,否则可能出现野指针; 返回对象时也要注意效率问题。 阅读全文
posted @ 2022-01-12 01:11 Kisen 阅读(67) 评论(0) 推荐(0)
摘要:C++种拷贝分为深拷贝和浅拷贝。 深拷贝本质上拷贝了指针和资源;浅拷贝本质上只拷贝了指针。 因此,需要注意的是,若拷贝构造函数或析构函数时必须使用深拷贝而不是浅拷贝,否则可能会导致对同一份资源进行多次构造或者析构,引发未知错误程序崩溃。 阅读全文
posted @ 2022-01-12 00:52 Kisen 阅读(40) 评论(0) 推荐(0)
摘要:C++中模板作为一种机制,是泛型编程的实质,进而也是容器实现的思想原理。 C++中当前标准中存在的容器有7种: vector, list, deque set, map, multiset, multimap 阅读全文
posted @ 2022-01-12 00:46 Kisen 阅读(127) 评论(0) 推荐(0)
摘要:标答: 函数重载时,要通过函数签名对函数进行区分。 所谓函数签名,是由以下两个部分组成的: 函数名 函数参数的个数和类型 在重载的函数中,由于函数名相同,因此要区分函数就要从参数方面入手,从函数传递参数的个数和类型上去判断究竟是哪个函数被调用了。 注意,C/C++是可以忽略函数返回值的,因此,不能从 阅读全文
posted @ 2022-01-12 00:34 Kisen 阅读(1376) 评论(0) 推荐(0)
摘要:何时使用static修饰的局部变量? 当要求变量受到上一次运算后的影响时,使用static修饰局部变量即可。 举个栗子: #include <iostream> using namespace std; int add(int n){ static int i = 0; i += n; return 阅读全文
posted @ 2022-01-11 22:08 Kisen 阅读(37) 评论(0) 推荐(0)
摘要:当类A中无任何成员变量或成员函数时,sizeof(A)=1。 为啥? 因为若为零,则声明一个class A[10]对象数组,但是每一个对象占用空间为0,则无法进行区分。 阅读全文
posted @ 2022-01-11 21:58 Kisen 阅读(61) 评论(0) 推荐(0)
摘要:目前只遇到过三个: #include <iostream> using namespace std; int add(int n){ static int i = 0; i += n; return i; } int main(void) { if(__cplusplus){ cout << "c+ 阅读全文
posted @ 2022-01-11 21:55 Kisen 阅读(72) 评论(0) 推荐(0)
摘要:virtual是隐性继承的,因此当父类写了virtual函数,子类进行重写时virtual可写可不写推荐写全。 其他类似virtual的具有隐性继承能力的还有: 阅读全文
posted @ 2022-01-11 21:32 Kisen 阅读(52) 评论(0) 推荐(0)
摘要:debug:调试 release:发布 这是谷歌翻译,但在build阶段这两者具体区别是什么捏? debug,会附加很多程序不相关或相关度不高的信息,编译产生的可执行文件大小也偏大一些; release是debug的“瘦身版”,简化了附加信息,大大减少了编译时间,同时产生的可执行文件也相对小一些。 阅读全文
posted @ 2022-01-11 21:26 Kisen 阅读(34) 评论(0) 推荐(0)
摘要:C++const修饰四大作用 阻止一个变量被改变,即”只读“; 函数声明中对形参添加const修饰,表明作为外部输入量无法被函数内部改变; 类的成员函数若被指定为const,则表明它是一个常函数,此成员函数自身无法修改对象类中的成员数据; 类的成员函数的返回值若被指定为const,则可以使得这个返回 阅读全文
posted @ 2022-01-11 21:19 Kisen 阅读(50) 评论(0) 推荐(0)
摘要:标答:全局对象的构造函数。 阅读全文
posted @ 2022-01-11 20:59 Kisen 阅读(90) 评论(0) 推荐(0)
摘要:简单情况下,打开会失败 复杂情况下,由于文件描述符结构中指针指向的内存被重复释放,而文件指针自身不会改变,因此在释放的间隔过程中有可能会将后来进入这片空间的新数据也释放掉,造成未知错误。 阅读全文
posted @ 2022-01-11 19:37 Kisen 阅读(442) 评论(0) 推荐(0)
摘要:转义字符 意义 ASCII码值(十进制) \a 响铃(BEL) 007 \b 退格(BS) ,将当前位置移到前一列 008 \f 换页(FF),将当前位置移到下页开头 012 \n 换行(LF) ,将当前位置移到下一行开头 010 \r 回车(CR) ,将当前位置移到本行开头 013 \t 水平制表 阅读全文
posted @ 2022-01-11 18:04 Kisen 阅读(136) 评论(0) 推荐(0)
摘要:方法一: 1、定义一个指针p; 2、sizeof(p),若结果为4,则为32位系统;若为8,则为64位系统。 方法二(不使用sizeof()): unsigned int c = ~ 0 ; cout << c;//结果为65535就是16位;4294967295就是64位 return 0; 阅读全文
posted @ 2022-01-11 17:35 Kisen 阅读(270) 评论(0) 推荐(0)