蓝桥ROS机器人之C++基础开发第一个程序

Posted zhangrelay

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥ROS机器人之C++基础开发第一个程序相关的知识,希望对你有一定的参考价值。

C++学习资料_zhangrelay的博客-CSDN博客


简介/入门
0.1这些教程的介绍
0.2编程语言简介
0.3C/C++ 简介
0.4C++开发简介
0.5编译器、链接器和库简介
0.6安装集成开发环境 (IDE)
0.7编译你的第一个程序
0.8几个常见的 C++ 问题
0.9配置编译器:构建配置
0.10配置编译器:编译器扩展
0.11配置编译器:警告和错误级别
0.12配置编译器:选择语言标准

C++ 基础
1.1语句和程序结构
1.2注释
1.3对象和变量简介
1.4变量赋值和初始化
1.5iostream 简介:cout、cin 和 endl
1.6未初始化的变量和未定义的行为
1.7关键字和命名标识符
1.8空格和基本格式
1.9文字和运算符简介
1.10表达式介绍
1.11开发你的第一个程序
1.x第一章总结与测验


1.11开发你的第一个程序

题目:

乘以 2

首先,让我们创建一个程序,要求用户输入一个整数,等待他们输入一个整数,然后告诉他们这个数字的 2 倍是多少。 该程序应产生以下输出(假设我输入 4 作为输入):

输入一个整数:4
这个数字的两倍是:8


不怎么好的代码:

#include <iostream>

// worst version
int main()

	std::cout << "Enter an integer: ";

	int num ;
	std::cin >> num;

	num = num * 2; // double num's value, then assign that value back to num

	std::cout << "Double that number is: " << num << '\\n';

	return 0;

在这个解决方案中,我们使用一个表达式将 num 乘以 2,然后将该值赋回 num。 从那时起, num 将包含我们的双倍数字。

为什么这是一个糟糕的解决方案:

  1. 在赋值语句之前,num 包含用户的输入。 赋值后,它包含一个不同的值。 这很令人困惑。
  2. 我们通过为输入变量分配一个新值来覆盖用户的输入,因此如果我们想扩展我们的程序以稍后使用该输入值执行其他操作(例如,将用户输入的三倍),它已经丢失了。

好一点的代码: 

#include <iostream>

// less-bad version
int main()

	std::cout << "Enter an integer: ";

	int num ;
	std::cin >> num;

	int doublenum num * 2 ; // define a new variable and initialize it with num * 2
	std::cout << "Double that number is: " << doublenum << '\\n'; // then print the value of that variable here

	return 0;

该解决方案非常易于阅读和理解,并且解决了最差解决方案中遇到的两个问题。

这里的主要缺点是我们定义了一个新变量(这增加了复杂性)来存储我们只使用一次的值。 我们可以做得更好。


近似完美的代码:

#include <iostream>

// preferred version
int main()

	std::cout << "Enter an integer: ";

	int num ;
	std::cin >> num;

	std::cout << "Double that number is: " <<  num * 2 << '\\n'; // use an expression to multiply num * 2 at the point where we are going to print it

	return 0;

这是一堆的首选解决方案。 当 std::cout 执行时,表达式 num * 2 将被计算,结果将是双倍 num 的值。 该值将被打印出来。 num 本身的值不会改变,所以如果我们愿意,以后可以再次使用它。

此版本是我们的参考解决方案。


作者注

编程的首要目标是让你的程序工作。一个不工作的程序不管写得多么好都没有用。

但是,有一句话我很喜欢:“你必须编写一次程序才能知道第一次应该如何编写它。”这说明了这样一个事实,即最好的解决方案通常并不明显,而且我们对问题的第一个解决方案通常不如他们应该做的那么好。

当我们专注于弄清楚如何使我们的程序运行时,将大量时间投入到我们甚至不知道是否会保留的代码上没有多大意义。所以我们走捷径。我们跳过错误处理和注释之类的内容。我们在整个解决方案中散布调试代码,以帮助我们诊断问题并发现错误。我们边走边学——我们认为可能行得通的事情终究行不通,我们必须回溯并尝试另一种方法。

最终结果是,我们最初的解决方案通常结构不完善、不健壮(防错)、可读性或简洁性。因此,一旦您的程序开始运行,您的工作就真的没有完成(除非该程序是一次性的/一次性的)。下一步是清理您的代码。这包括:删除(或注释掉)临时/调试代码、添加注释、处理错误情况、格式化代码以及确保遵循最佳实践。即使这样,你的程序也可能没有想象的那么简单——也许有可以合并的冗余逻辑,或者可以组合的多个语句,或者不需要的变量,或者其他一千个小东西可以简化。当新程序员应该优化可维护性时,他们往往会专注于优化性能。

这些教程中提出的解决方案很少有第一次就很好用。相反,它们是不断改进的结果,直到找不到其他可以改进的地方。在许多情况下,读者仍然会发现许多其他建议作为改进!

所有这一切实际上是在说:如果/当您的解决方案没有从您的大脑中完美优化出来时,请不要感到沮丧。这很正常。编程的完美是一个迭代过程(需要重复通过)。

作者注

还有一件事:你可能会想,“C++ 有很多规则和概念。我怎么记得所有这些东西?”。

简短的回答:你没有。 C++ 的一部分是使用你所知道的,另外两部分是查找如何完成其​​余部分。

当你第一次阅读这个网站时,不要把注意力集中在记忆细节上,而要更多地了解什么是可能的。然后,当您需要在您正在编写的程序中实现某些东西时,您可以回到这里(或访问参考站点)并重新了解如何执行此操作。



g++编译,注意使用c++11

g++ -std=c++11 multiply2.cpp


-Fin-


 

以上是关于蓝桥ROS机器人之C++基础开发第一个程序的主要内容,如果未能解决你的问题,请参考以下文章

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

蓝桥ROS机器人之极简贪吃蛇

蓝桥ROS机器人之现代C++学习笔记3.1 Lambda 表达式

蓝桥ROS机器人之现代C++学习笔记7.3 期物

蓝桥ROS机器人之现代C++学习笔记4.3 元组

蓝桥ROS机器人之现代C++学习笔记4.2 无序容器