# cpp_exp **Repository Path**: anjiang2020_admin/cpp_exp ## Basic Information - **Project Name**: cpp_exp - **Description**: c++练习代码 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-11-19 - **Last Updated**: 2022-12-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 代码解析 ## 8_OperationReload2.cc解析地址 https://zhuanlan.zhihu.com/p/435336100 ## 12_cig.cc解析地址 https://zhuanlan.zhihu.com/p/435387388 # 使用的编译命令 ``` g++-10 -g -Wall -std=c++11 6_inherit.cc && ./a.out gcc-10 1_helloworld.cc -lstdc++ -o main clang++ 1_helloworld.cc -o out && ./out g++-10 1_helloworld.cc -o out && ./out 最简单的编译方式: $ g++ helloworld.cpp 由于命令行中未指定可执行程序的文件名,编译器采用默认的 a.out。程序可以这样来运行: $ ./a.out Hello, world! 通常我们使用 -o 选项指定可执行程序的文件名,以下实例生成一个 helloworld 的可执行文件: $ g++ helloworld.cpp -o helloworld 执行 helloworld: $ ./helloworld Hello, world! 如果是多个 C++ 代码文件,如 runoob1.cpp、runoob2.cpp,编译命令如下: $ g++ runoob1.cpp runoob2.cpp -o runoob 生成一个 runoob 可执行文件。 g++ 有些系统默认是使用 C++98,我们可以指定使用 C++11 来编译 main.cpp 文件: g++ -g -Wall -std=c++11 main.cpp ``` # g++ 常用命令选项 ``` 选项 解释 -ansi 只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色, 例如 asm 或 typeof 关键词。 -c 只编译并生成目标文件。 -DMACRO 以字符串"1"定义 MACRO 宏。 -DMACRO=DEFN 以字符串"DEFN"定义 MACRO 宏。 -E 只运行 C 预编译器。 -g 生成调试信息。GNU 调试器可利用该信息。 -IDIRECTORY 指定额外的头文件搜索路径DIRECTORY。 -LDIRECTORY 指定额外的函数库搜索路径DIRECTORY。 -lLIBRARY 连接时搜索指定的函数库LIBRARY。 -m486 针对 486 进行代码优化。 -o FILE 生成指定的输出文件。用在生成可执行文件时。 -O0 不进行优化处理。 -O 或 -O1 优化生成代码。 -O2 进一步优化。 -O3 比 -O2 更进一步优化,包括 inline 函数。 -shared 生成共享目标文件。通常用在建立共享库时。 -static 禁止使用共享连接。 -UMACRO 取消对 MACRO 宏的定义。 -w 不生成任何警告信息。 -Wall 生成所有警告信息。 ``` # 没有头文件时的一个解决方办法 ``` export CPLUS_INCLUDE_PATH="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include" g++ hello_opengl.cpp -l glfw3 -framework OpenGL -o run 报错:error ld: library not found for -lglfw3 找不到链接的库 1、locate glfw3 2、export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/:$PKG_CONFIG_PATH 3、pkg-config --cflags --libs glfw3 -I/usr/local/Cellar/glfw/3.3/include -L/usr/local/Cellar/glfw/3.3/lib -lglfw 发现是glfw 4、g++ hello_opengl.cpp -l glfw -framework OpenGL -o run ``` # 如何查找mac中的g++高版本 ``` macoc中gcc默认是4.2版本, 使用命令:ls /usr/local/bin | grep gcc后,发现,我安装的有gcc-10 ls /usr/local/bin | grep g++ 后,发现有g++-10 所以,我直接使用g++-10就好了 干脆起个别名算了,我现在又不使用gcc4.2了 ``` ``` zhaomingming@bogon cpp % ls /usr/bin | grep g++ clang++ g++ llvm-g++ ``` 我发现使用clang++也可以 # 心得 ``` 这个运算符重载的例子真好,总算是理解了重载的意义。现在的孩子真幸福, 不像我们原来,得肯书,书上没有例子。 运算符的重载真的写的太好了, 这里利用运算符的重载,实现了一个迭代器 https://www.runoob.com/cplusplus/cpp-polymorphism.html 以上网页中介绍的内容,同样简单高效。这里介绍了一个类的多态性质,以及实现多态时,所需要使用的虚函数和纯虚函数的感念。真是太好了,这个教程 https://www.runoob.com/cplusplus/cpp-data-abstraction.html 原来“数据抽象"是这个意思,在c++中,数据抽象的本意是隐藏我想隐藏的,不对外展示细节的意思。相当于把一个功能的数据传递部分和数据生成部分模块化了,隔离开了,或者说把功能接口话了。只有类内才能操作和控制,类外只能读取,或者通过类内开的接口来访问。 一般来说,我们默认会将类的成员状态设置为私有(private),除非我们真的需要将其改为公开。这就是数据封装/数据抽象的一般应用 所谓接口,就是在基类中将某个函数设置为虚函数,然后栽派生类中实现这个虚函数的方式,这样的话通过虚函数,可以不同类的实现。这个虚函数就是接口。 如果你想往这样的接口上添加一种实现,那么只用继承基类,然后实现相应接口就行了,太棒了 c++模版,这个语法主要方便了不同类型数据,使用同一种计算方式。那么这种计算方式,可以是函数,也可以是类 c++的知识,让人看起来流连忘返,或许是之前我欠的太多了 https://www.thefreecountry.com/sourcecode/cpp.shtml ``` # 查看cpu的指令集 # macos查看cpu支持的指令集 sysctl -a | grep machdep.cpu.features # macos 查看cpu是否支持SSE 4.2 sysctl -a | grep machdep.cpu.features | grep SSE # 查看支持的所有的指令集 sysctl machdep.cpu