- 从Hello World谈起
- 系统 I/O
- 猜数字与控制流
- 结构体与自定义数据类型
从Hello World谈起
#includeint main() { std::cout << "Hello world" << std::endl; }
#includevoid fun(const char* pInfo) { std::cout << pInfo << std::endl; } int main() { fun("Hello world"); fun("Hello China"); }
函数可以被反复调用。
void表示这个fun函数,不需要任何的返回值。
main是一个非常特殊的函数,它是由系统进行调用的,是整个程序的入口,main通过函数名调用不同的函数。c++必须有一个main,底层操作系统调用c++,最开始调用的函数就是main。main的返回值会返回操作系统。为什么要有返回值,一个程序运行可能会出错,我们要通过返回值看是否成功。0表示是否成功。不成功,会有各种各样的问题,成功就返回0.
c++如果不是void的函数,必须要返回相应的类型。main例外,如果不写return,默认返回0.
main函数的返回类型一定是int。其他函数返回类型是千差万别的。
另一种写法
语句块
告诉读者,这个形参作为一个占位符。
形参(形式参数)列表:函数名后面的()内容。
include,既可以使用<>,也可以使用"“。区别在于”“,系统会在当前目录下去查找头文件。如果用的是<>,系统会从整个的操作系统的环境变量中的库去找。如果是我们工程自己写的头文件,我们用”",一些cpp标准库提供的,我们使用<>。自己的头文件,一般有后缀.h等。标准库一般没有后缀。
cin中的c:character。
输入流有1个,输出流有很多个。
输入流用户通过键盘输入,输出通常是输出到屏幕上。
int main()
{
int x;
std::cout << "How old are you:";
std::cin >> x;
std::cout << "You are " << x;
}
cerr和clog的区别在于是否立即刷新缓冲区。一个个字符输出效率比较低,所以一般会先输出到缓冲区,一个缓冲区一般包括64k或者多少个字节。当缓冲区满了的时候,我们会一次性的将内容输出到屏幕或者文件。如果程序中有bug,又没有及时刷新缓冲区,那么我们就无法精确定位到哪里出了问题。所以虽然刷新缓冲区会降低效率,但是我们还是希望及时的刷新缓冲区。
cerr是立即刷新缓冲区(是自动的),clog不是立即刷新。如果我们自己是手动操作刷新缓冲区,需要使用std::flush或者std::endl(加入了自动换行).
通常情况,只有在必要的时候,使用endl。
名字空间,防止名字冲突。
#include// function namespace NameSpace1 { void fun() { } } namespace NameSpace2 { void fun() { } } int main() { NameSpace1::fun(); NameSpace2::fun(); }
int main()
{
using namespace NameSpace1;
fun();
}
int main()
{
namespace ns1 = NameSpace1;
ns1::fun();
}
我们可以通过namespace自己定义一些名字空间。std是cpp标准的名字空间,标准库。
名称改变name mangling。
filt -t。是demangling。解改变。
#include猜数字与控制流int main(int argc, char const *argv[]) { std::cout << "Hello Wei" << std::endl; int x = 1; printf("I have %d catn", x); return 0; }
#includeint main(int argc, char const *argv[]) { int x = 42; std::cout << "Please input a number:" << std::endl; int y = 0; std::cin >> y; if (y == 42) { std::cout << "Right" << std::endl; } else { std::cout << "Wrong" << std::endl; } }
左值是可以放在等号左边的,右值是放在等号右边的。
42是一个常量,不能做左值。y是一个变量,是一个右值。
#includeint main(int argc, char const *argv[]) { int x = 42; int y = 0; while (x != y) { std::cout << "Please input a number : " << std::endl; std::cin >> y; } }
#include结构体与自定义数据类型int main(int argc, char const *argv[]) { int x = 42; int y = 0; while (true) { std::cout << "Please input a number : " << std::endl; std::cin >> y; if (x == y) { std::cout << "Right" << std::endl; break; } } }
#includestruct Point { int x; int y; }; void fun(Point p) { p.x; p.y; } int main(int argc, char const *argv[]) { Point p; p.x; p.y; }
使用Point表示一个点,比传入fun(x,y)有更清晰的表达。通过.操作元素。
#includestruct Point { int x; int y; void IncX() { x += 2; } }; int main(int argc, char const *argv[]) { Point p; p.x = 10; p.IncX(); std::cout << p.x << " " << p.y << std::endl; }
将函数引入struct,更像是一个类。



