原著:www.geocities.jp/ky_webid/cpp
第1章 输出流
std::ios::sync_with_stdio(false) 的作用是取消缓冲区同步。
因为printf()/scanf()是C函数,而cin/cout是C++函数,这些函数需要用到各自的缓冲区,为了防止各自的缓冲区错位,C++默认将C函数和C++函数的缓冲区同步。
当你设置成std::ios::sync_with_stdio(false)后C++就会取消同步,这会提高cin/cout的运行速度,代价是不能和printf()/scanf()混用,否则会因不同步而出现问题。
第2章 输入流
#include <iostream>
#include <iomanip>
int main()
{
char str[81];
std::cout << "80文字以内の文字列を入力して下さい\n";
std::cin >> std::setw(81) >> str;
std::cout << str;
return 0;
}
使用
setw设置了输入长度,记得包含
iomanip
第3章 manipulate
std::flush 清空缓冲区
std::cout << "..("<< std::chrono::duration_cast<std::chrono::milliseconds>(d).count()<< " ms).." << std::flush;
不使用的std ::冲洗,输出是相同的,但可能不会出现在实时.
std::endl
它不但实现了换行操作,而且还对输出缓冲区进行刷新
std::ends
Buffer中输出'\0'
std::ws
输入流中使用,表示读取时跳过空白
10进制,8进制,16进制格式输出
std::cout << std::hex << num << std::endl;
std::setw,std::left,std::right,std::setfill 记得包含iomanip
设置输出宽度,补充位置设定,空白填充值
std::cout << std::setw(10) << std::left << std::setfill('0') << "123" << std::endl;
结果为0000000123
struct是没有方法,全部成员变量为public的类。
private,public,protect为了实现封装的特性。
构建函数顺序
//基类
class CBase
{
public:
CBase();
~CBase();
};
// 子类
class CSub : public CBase
{
public:
CSub();
~CSub();
};
调用顺序是(堆栈)
CBase构造函数
CSub构造函数
CSub析构函数
CBase析构函数
为什么没有虚构造函数?
虚构造函数,调用时会根据对象类型决定调用函数。如果用~Base()是虚函数,a.~Base()对象已经确定,可以调用对应析构函数。
而构造函数先使用基类构造函数,对象类型没有确定,无法决定使用哪个构造函数。
函数的继承
class CBase
{
public:
CBase(int num);
private:
int m_num;
};
class CSub : public CBase
{
public:
CSub();
CSub(int num);
};
// CBaseクラスのコンストラクタ
CBase::CBase(int num)
{
m_num = num;
}
// CSubクラスのコンストラクタ
CSub::CSub() : CBase(0)
{
}
// CSubクラスのコンストラクタ
CSub::CSub(int num) : CBase(num)
{
}
new A 和 new A() 区别
类体无显示构造函数时,new A()首先调用operator new来为对象分配内存,然后使用空值初始化对象成员变量,而new A仅仅是调用operator new分配内存,对象的成员变量是无意义的随机值!