C++
kun shao
励志成为senior的男人
爱好运动
喜欢新鲜事物 更享受深耕
展开
-
中文转阿拉伯数字
中文转阿拉伯数字题目描述思路注意点代码题目描述把中文(数字)转换成阿拉伯数字,例如把二千亿零一百零一万零二百 转为 200001010200。思路总的思路来说,就是从右向左(从低位到高位)。当前单位为curU, 转换结果为ret如果遇到比curU高的单位X,则curU=X;如果遇到更低的单位x,则curU = curU * x;如果遇到数字n,则ret += n * curU;注意点该题目中,转换后的数字超过了int的表示范围,需要使用long long类型。另外,处理中文字符串,要使原创 2022-05-13 11:47:00 · 2027 阅读 · 1 评论 -
友元
在了解友元之前,我们需要知道为什么需要友元。在为类重载二元运算符时常常需要友元。假设Time是我们自己定义的关于时间的类,现在要重载乘法运算符,使得Time值可以与一个double值相乘。但是如果用成员函数重载乘法运算符,左侧的操作数是调用对象,也就是说,下面的语句:A = B * 2.75;将被转换成下面的成员函数调用:A = B.operator * (2.75); 但是下面的语句又会怎么样呢?A = 2.75*B;因为2.75不是Time类型的对象,因此,编译器不能使用成员函数来原创 2020-06-20 21:25:32 · 153 阅读 · 0 评论 -
重载限制
C++对用户定义的运算符重载的限制:重载后的运算符必须至少有一个操作数是用户定义的类型,这将防止用户为标准类型重载运算符。使用运算符时不能违背运算符原来的句法规则。例如,不能将求模运算符(%)重载成使用一个操作数:int x;Time shiva;//自定义类型% x; //invalid for modulus operator% shiva;//invalid for overloaded operator同样,不能修改运算符的优先级。因此,如果将加号运算符重载成两个类相加原创 2020-06-19 22:07:53 · 307 阅读 · 0 评论 -
枚举量冲突
两个枚举定义中的枚举量可能发生冲突。比如有两个枚举定义:enum egg {Small, Medium, Large, Jumbo};enum t_shirt { Small, Medium, Large, XLarge};这将没有办法通过编译,因为egg Small和 t_shirt Small位于相同的作用域内,将发生冲突。为了避免这个问题,C++11提供了一种新枚举,其枚举量的作用域为类。这种枚举的声明类似于下面这样:enum class egg {Small, Medium, Large,原创 2020-06-18 22:15:01 · 1022 阅读 · 0 评论 -
如何创建由所有对象共享的常量
有时候,使得符号常量的作用域为类很有用。比如说要创建一个由所有对象共享的常量要怎么做呢?你可能会认为下面这样做可行class bakery{private: const int Months = 12; double costs[Months]; ...};但这样子时行不通的,因为声明类只是描述了对象的形式,并没有创建对象。因此,在创建对象前,将没有用于存储值得空间。然而,有两个方式可以实现这个目标,并且效果相同。第一种方式是在类中声明一个枚举。在类声明中声明的枚举的作用域为整个类,原创 2020-06-18 21:59:45 · 434 阅读 · 0 评论 -
牛客刷题和本地调试结果不一样--解决思路
今天刷题,碰到了牛客网上测试结果和本地调试不一样的情况;#include<iostream>const int MAX = 20;int min(int a, int b) {return a<b? a:b;}int main(){ int m,n; while(scanf("%d%d", &m, &n)!=EOF){ i...原创 2020-05-04 16:22:19 · 2131 阅读 · 0 评论 -
(unsigned)int (unsigned)long int (unsigned)long long int取值范围 打印问题
short int 1个字节储存unsigned short int 0~255 (0~28-1)short int -128~127 (-27~27-1)int 2个字节储存unsigned int 0~65535 (0~216-1)int -32768~32767 (-215~215-1)long 4个字节储存unsigned long 0...原创 2020-05-01 11:00:38 · 1364 阅读 · 0 评论 -
string求.lenth()无效的原因
大家一定不要用printf("%s", …)这种方式去输入string对象;否则的话调试的时候,看上去输入都是正常的,但是用.lenth()函数求字符串长度的时候,就会发生问题,一直为0;并且编译也不会报错;正确的做法是用cin>>来输入string对象。...原创 2020-04-30 16:13:15 · 598 阅读 · 0 评论