主要使用Java语言,但是个程序员就难免跟c++/c打交道,一写代码就发现c++的坑好多好多啊,所以发现一点记录一点吧,避免时间长不接触之后又要掉一遍原来掉过的坑。
一、中文乱码问题
在中文输出的函数前添加代码(仅作用于当前文件)
system("chcp 65001");
传送门mingw控制台中文乱码
二、数字与字符串之间的转换
#include <sstream>
using std::string;
double price = 10;
int seatNo = 11;
std::stringstream ss;
ss << price;
ss >> Price;
ss.clear(); //清除数据
ss.str("");
ss << seatNo;
ss >> SeatNo;
三、bool数组初始化
零初始化器{0}
bool* booked = new bool[MAXNum]{false}; //数组全部初始化为0
bool *bo = new bool[10]{true}; //数组只有第一个元素为1,其余为0
std::fill_n(bo, 5, true); //前n(n=5)个元素为1,后面的为0
四、printf()函数
1、输出字符串
如果使用printf()函数输出字符串,由于printf()是c++为了兼容c的,而在C中没有string类型,故必须通过string类对象的成员函数c_str()把string对象转换成C中的字符串样式。使用.c_str()
函数,c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同.
我们可以看到printf()函数的参数类型要求为const char *:
而c_str()函数的返回值即为const char *:
使用示例:
string s = "abc";
printf("%s",s.c_str());
五、构造函数
1、若未给类定义空参的构造函数,会出现无法新建对象的情况。
2、似乎只有指针对象才可以被赋值成new constructor();而普通对象只能在声明后利用setter逐步给变量赋值。根据报错提示,应该new方法返回的是指针变量。
Line *line = new Line(id, a, b, time, 400);