C++学习难吗?

C++学习C++学习难吗?

C++ 条件运算符 ? :
Exp1 ? Exp2 : Exp3;

其中,Exp1、Exp2 和 Exp3 是表达式。请注意冒号的使用和位置。? : 表达式的值取决于 Exp1 的计算结果。如果 Exp1 为真,则Exp1 = Exp2 计算结果。如果 Exp1 为假,则计算 Exp3 的值,且 Exp3 的计算结果则为整个 ? : 表达式的值。

? :也被称为三元运算符

C++类

类的形式,要表明是class 然后是里面的各种东西 但是呢

class Box{ public: double length; // Length of a box double breadth; // Breadth of a box double height; // Height of a box};

关键字 public 确定了类成员的访问属性。在类对象作用域内,公共成员在类的外部是可访问的。私有(private)私有成员变量或函数在类的外部是不可访问的,甚至是不可查看的。只有类和友元函数可以访问私有成员。成员和类的默认访问修饰符是 private。

class Box{ double width; public: double length; void setWidth( double wid ); double getWidth( void );};

调用class的做法是:

#include using namespace std;class Box{ public: double length; // 长度 double breadth; // 宽度 double height; // 高度};int main( ){ Box Box1; // 声明 Box1,类型为 Box Box Box2; // 声明 Box2,类型为 Box double volume = 0.0; // 用于存储体积 // box 1 详述 Box1.height = 5.0; Box1.length = 6.0; Box1.breadth = 7.0; // box 2 详述 Box2.height = 10.0; Box2.length = 12.0; Box2.breadth = 13.0; // box 1 的体积 volume = Box1.height * Box1.length * Box1.breadth; cout << "Box1 的体积:" << volume <

int main( ){Box Box1; // 声明对象 Box1,类型为 BoxBox Box2; // 声明对象 Box2,类型为 Box

对象的时候如此声明。

 #include using namespace std;class Box{ public: double length; // 长度 double breadth; // 宽度 double height; // 高度 // 成员函数声明 double getVolume(void); void setLength( double len ); void setBreadth( double bre ); void setHeight( double hei ); }; // 成员函数定义double Box::getVolume(void){ return length * breadth * height;}void Box::setLength( double len ){ length = len;}void Box::setBreadth( double bre ){ breadth = bre;}void Box::setHeight( double hei ){ height = hei;}// 程序的主函数int main( ){ Box Box1; // 声明 Box1,类型为 Box Box Box2; // 声明 Box2,类型为 Box double volume = 0.0; // 用于存储体积 // box 1 详述 Box1.setLength(6.0); Box1.setBreadth(7.0); Box1.setHeight(5.0); // box 2 详述 Box2.setLength(12.0); Box2.setBreadth(13.0); Box2.setHeight(10.0); // box 1 的体积 volume = Box1.getVolume(); cout << "Box1 的体积:" << volume <类成员函数

类的成员函数是指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样。类成员函数是类的一个成员,它可以操作类的任意对象,可以访问对象中的所有成员。

成员函数可以定义在类定义内部,或者单独使用范围解析运算符 :: 来定义。在类定义中定义的成员函数把函数声明为内联的,即便没有使用 inline 标识符。所以您可以按照如下方式定义 Volume() 函数:

class Box{ public: double length; // 长度 double breadth; // 宽度 double height; // 高度 double getVolume(void) { return length * breadth * height; }};

也可在外面定义您也可以在类的外部使用**范围解析运算符 :: **定义该函数,如下所示:

double Box::getVolume(void){ return length * breadth * height;}

需要强调一点,在 :: 运算符之前必须使用类名。如果调用成员函数的时候,需要用(.)运算符

Box myBox; // 创建一个对象myBox.getVolume(); // 调用该对象的成员函数

范围解析运算符 :: 在定义成员函数的时候用

(.)符号在调用成员函数的时候用

构造函数

类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。

特点:构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。

拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于

C++ 指向类的指针
int main(void){ Box Box1(3.3, 1.2, 1.5); // Declare box1 Box是一个构造函数 Box Box2(8.5, 6.0, 2.0); // Declare box2 Box *ptrBox; // Declare pointer to a class. // 保存第一个对象的地址 ptrBox = &Box1; // 现在尝试使用成员访问运算符来访问成员 cout << "Volume of Box1: " << ptrBox->Volume() << endl; // 保存第二个对象的地址 ptrBox = &Box2; // 现在尝试使用成员访问运算符来访问成员 cout << "Volume of Box2: " << ptrBox->Volume() << endl; return 0;}
消息订阅器和发布器

下面是一个关于subuscriber和publisher的程序

#include #include #include class TeleopTurtle{public: TeleopTurtle(); //一个构造函数private: void joyCallback(const sensor_msgs::Joy::ConstPtr& joy); //回调函数 ros::NodeHandle nh_; int linear_, angular_; double l_scale_, a_scale_; ros::Publisher vel_pub_; //在这里定义了publisher 和subscriber ros::Subscriber joy_sub_; //};// %EndTag(CLASSDEF)%// %Tag(PARAMS)%TeleopTurtle::TeleopTurtle(): //构造函数的定义 linear_(1), angular_(2) //这个相当于给linear赋值{ nh_.param("axis_linear", linear_, linear_); nh_.param("axis_angular", angular_, angular_); nh_.param("scale_angular", a_scale_, a_scale_); nh_.param("scale_linear", l_scale_, l_scale_); //nh_这个handle相当于c++中的class name,param只是这个类下面的一个对象。 vel_pub_ = nh_.advertise("turtle1/command_velocity", 1); joy_sub_ = nh_.subscribe("joy", 10, &TeleopTurtle::joyCallback, this);}//定义joyCallback这个回调函数里面采用了vel_pub_这个publisher。使用的流程是这样的,先是joy_sub_订阅了sensor_msgs 的消息,这里面采用了回调函数joyCallback,再回调的时候,又调用了publisher vel_pub_,把速度信息发布到turtle1/command_velocity这个topicvoid TeleopTurtle::joyCallback(const sensor_msgs::Joy::ConstPtr& joy){ turtlesim::Velocity vel; vel.angular = a_scale_*joy->axes[angular_]; vel.linear = l_scale_*joy->axes[linear_]; vel_pub_.publish(vel);}int main(int argc, char** argv){ ros::init(argc, argv, "teleop_turtle"); TeleopTurtle teleop_turtle; ros::spin();}
构造函数

构造函数的名字和类完全一样,方便赋值

带参数的构造函数

也是和类的名字一样

折构函数

析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。

问题总结问:int main(int argc, char* argv[])里的(int argc, char* argv[])是什么意思?为什么要用这个?我的整理,argc 指的是参数的个数,而argv是运行参数的字符串数组(每个char 表示程序路径名和参数)答1:很多程序都是带参数运行的,比如WINDOWS命令行下的很多实用程序。参数增加了程序的灵活性。你可以在“开始”->“运行”中输入cmd进入命令行。比如一个叫做del的命令,(删除文件),其实就是del.exe,它带参数的,完整的命令格式可以是del readme.txt这个命令将删除当前路径下的readme.txt文件(如果有的话);此时,运行的程序就是del.exe,而readme.txt就是它的参数,假设del程序的main函数原型为 int main(int argc, char* argv[]),那么argc = 1,(1个参数)argv[0] = “readme.txt”(接收的字符串);假设一个程序的main函数不带任何参数,那么很显然,它仍可以运行,只是,不接收参数罢啦答2:void main(int argc, char* argv[ ])假设程序编译成为 cp.exe然后在命令行中输入c:>cp.exe doc1.txt doc2.txt这行中有三个字符串分别为 cp.exe doc1.txt doc2.txt则argc为3,即argc是命令行中参数的个数。char *argv[]为一个指像字符串的数组。argv[0]="cp.exe"argv[1]="doc1.txt"argv[2]="doc2.txt"即命令行中各各字符串保存在 *argv[]中下面两段程序中,&的位置造成了什么不同?????

void chatterCallback(const std_msgs::String::ConstPtr& msg){ROS_INFO("I heard: [%s]", msg->data.c_str());}和bool add(beginner_tutorials::AddTwoInts::Request &req,beginner_tutorials::AddTwoInts::Response &res){res.sum = req.a + req.b;ROS_INFO("request: x=%ld, y=%ld", (long int)req.a, (long int)req.b);ROS_INFO("sending back response: [%ld]", (long int)res.sum);return true;}第一个程序,msg是一个指针,指向std::String的位置,前面的const是定义一个常量指针,也就是说,只能通过指针读取信息,不能写;第二个程序,也是指针,但是不知道区别在哪里。。。。。。

类操作里面 (#)和(.)操作分别是什么意思,什么时候用?

范围解析运算符 :: 在定义成员函数的时候用 (.)符号在调用成员函数的时候用

struct 里面 (.) (->) (&)分别怎么用?指向结构的指针您可以定义指向结构的指针,方式与定义指向其他类型变量的指针相似,如下所示:struct Books *struct_pointer;现在,您可以在上述定义的指针变量中存储结构变量的地址。为了查找结构变量的地址,请把 & 运算符放在结构名称的前面,如下所示:struct_pointer = &Book1;为了使用指向该结构的指针访问结构的成员,您必须使用 -> 运算符,如下所示:struct_pointer->title;

如有侵权,请联系删除!

未经允许不得转载:技术 » C++学习难吗?

相关推荐