蓝桥ROS机器人之C++基础2总结和测评

举报
zhangrelay 发表于 2022/03/22 23:36:41 2022/03/22
【摘要】 函数是旨在完成特定工作的可重用语句序列。自己编写的函数称为用户定义函数。 函数调用是告诉 CPU 执行函数的表达式。发起函数调用的函数是调用者,被调用的函数是被调用者或被调用函数。进行函数调用时不要忘记包含括号。 函数定义中的花括号和语句称为函数体。 函数的返回类型表示函数将返回的值的类型。return 语句确定返回给调用者的具体...

函数是旨在完成特定工作的可重用语句序列。自己编写的函数称为用户定义函数。

函数调用是告诉 CPU 执行函数的表达式。发起函数调用的函数是调用者,被调用的函数是被调用者或被调用函数。进行函数调用时不要忘记包含括号。

函数定义中的花括号和语句称为函数体

函数的返回类型表示函数将返回的值的类型。return 语句确定返回给调用者的具体返回值。这个过程称为按值返回。如果函数不向调用者返回值,则它们的返回类型可以是void 。未能从非 void 函数返回值将导致未定义的行为。

函数main的返回值称为状态码,它告诉操作系统(以及任何其他调用程序)程序是否成功执行。按照共识,返回值 0 表示成功,正返回值表示失败。

函数参数是函数中使用的变量,其值由函数的调用者提供。参数是从调用者传递给函数的特定值。当一个参数被复制到参数中时,这称为按值传递

C++ 没有定义函数调用是否从左到右评估参数,反之亦然。

函数体内部定义的函数参数和变量称为局部变量。变量存在的时间称为它的生命周期。变量是在运行时创建和销毁的,也就是程序运行的时候。变量的作用域决定了它可以在哪里被访问。当一个变量可以被访问时,我们说它在范围内。当它无法访问时,我们说它超出了范围。Scope 是一个编译时属性,这意味着它在编译时强制执行。

重构是将一个较大的函数分解为许多更小、更简单的函数的过程。

空白是指用于格式化的字符。在 C++ 中,这包括空格、制表符和换行符。

向声明允许我们在实际定义标识符之前告诉编译器标识符的存在。要为函数编写前向声明,我们使用函数原型,其中包括函数的返回类型、名称和参数,但没有函数体。

定义实际上实现(对于函数和类型)或实例化(对于变量)标识符。声明是告诉编译器标识符存在的语句。在 C++ 中,所有定义都用作声明。纯声明是不是定义的声明(例如函数原型)。

大多数重要的程序都包含多个文件。

当以编译器或链接器无法区分的方式将两个标识符引入同一程序时,编译器或链接器将产生命名冲突命名空间保证命名空间内的所有标识符都是唯一的。std 命名空间就是这样的命名空间之一。

处理器是在代码编译之前在代码上运行的进程。指令是预处理器的特殊指令。指令以 # 符号开头并以换行符结尾。是定义如何将输入文本转换为替换输出文本的规则。

头文件是旨在将声明传播到代码文件的文件。使用#include指令时,#include指令被包含文件的内容替换。在包含头文件时,在包含系统头文件(例如 C++ 标准库中的头文件)时使用尖括号,在包含用户定义的头文件(您编写的头文件)时使用双引号。包含系统头文件时,如果存在不带 .h 扩展名的版本,请包含它们。

标头保护可防止标头的内容多次包含在给定的代码文件中。它们不会阻止标头的内容被包含到多个不同的代码文件中。


编写一个单文件程序(名为 main.cpp),从用户那里读取两个单独的整数,将它们相加,然后输出答案。该程序应使用三个功能:

  • 应该使用名为“readNumber”的函数从用户那里获取(并返回)一个整数。
  • 应该使用名为“writeAnswer”的函数来输出答案。这个函数应该接受一个参数并且没有返回值。
  • 应该使用 main() 函数将上述函数粘合在一起。

提示:不需要编写单独的函数来进行添加(直接使用 + 即可)。

提示:需要调用 readNumber() 两次。

   
  1. #include <iostream>
  2. int readNumber()
  3. {
  4. std::cout << "Enter a number: ";
  5. int x {};
  6. std::cin >> x;
  7. return x;
  8. }
  9. void writeAnswer(int x)
  10. {
  11. std::cout << "The answer is " << x << '\n';
  12. }
  13. int main()
  14. {
  15. int x { readNumber() };
  16. int y { readNumber() };
  17. writeAnswer(x + y); // using operator+ to pass the sum of x and y to writeAnswer()
  18. return 0;
  19. }

 


修改在练习 #1 中编写的程序,使 readNumber() 和 writeAnswer() 位于一个名为“io.cpp”的单独文件中。使用前向声明从 main() 访问它们。

如果遇到问题,请确保将“io.cpp”正确添加到项目中,以便对其进行编译。

io.cpp


  
  1. #include <iostream>
  2. int readNumber()
  3. {
  4. std::cout << "Enter a number: ";
  5. int x {};
  6. std::cin >> x;
  7. return x;
  8. }
  9. void writeAnswer(int x)
  10. {
  11. std::cout << "The answer is " << x << '\n';
  12. }

main.cpp


  
  1. // these are the forward declarations for the functions in io.cpp
  2. int readNumber();
  3. void writeAnswer(int x);
  4. int main()
  5. {
  6. int x { readNumber() };
  7. int y { readNumber() };
  8. writeAnswer(x+y);
  9. return 0;
  10. }

修改在 #2 中编写的程序,使其使用头文件(名为 io.h)来访问函数,而不是直接在代码 (.cpp) 文件中使用前向声明。确保您的头文件使用头保护

io.h


  
  1. #ifndef IO_H
  2. #define IO_H
  3. int readNumber();
  4. void writeAnswer(int x);
  5. #endif

io.cpp


  
  1. #include "io.h"
  2. #include <iostream>
  3. int readNumber()
  4. {
  5. std::cout << "Enter a number: ";
  6. int x {};
  7. std::cin >> x;
  8. return x;
  9. }
  10. void writeAnswer(int x)
  11. {
  12. std::cout << "The answer is " << x << '\n';
  13. }

main.cpp


  
  1. #include "io.h"
  2. int main()
  3. {
  4. int x { readNumber() };
  5. int y { readNumber() };
  6. writeAnswer(x+y);
  7. return 0;
  8. }

 

文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。

原文链接:zhangrelay.blog.csdn.net/article/details/123646101

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。