1.使用什么 - >例如test-> name与test.name?
相同2.头文件用于什么?我习惯了其他编程语言,比如java,你只需要1个文件(类文件)。我们是否需要使用头文件来声明所有内容?
答案 0 :(得分:4)
a->b
是指针时,(*a).b
与a
相同。对于同样的事情,它只是方便的语法。当a
是一个类时,它会使用operator->
作为调用对象调用类的a
。如果您不明白,那么不要担心,当您进一步使用C ++时,您将会这样做。但是,所有这些问题都可以通过一本优秀的C ++书来解答,所以请在购买和阅读之前先解决一下,这样可以节省大量时间和头痛。
答案 1 :(得分:1)
structure->member
相当于
(*structure).member
structure
并访问成员member
答案 2 :(得分:1)
1)“箭头”操作符->
不与操作符.
相同,但是当您使用指向结构而不是结构的指针时,这是一个快捷方式。请参阅this explanation,例如:
struct Point {
int x;
int y;
};
Point* p; // p points to a Point struct
p = new Point;
p->x = 12; // This is an useful shortcut for...
(*p).x = 12; // .. this
2)关于头文件,它们不是必需的,你也可以在.c
文件的开头添加声明,但是将声明和实际代码分开是一个有用的约定。
答案 3 :(得分:1)
好吧,我会尝试以简单的方式解释,让初学者更容易理解。
是的,它与dot相同,但它用于指针。
MyClass a;
a.myMethod();
MyClass* b = new MyClass;
b->myMethod();
delete b;
a和b都调用相同的方法,但是a在堆中分配,b是由new分配的指针。分配的内存明确应始终被释放(因此删除b语句)。 这实际上是一种简化,箭头所做的是取消引用指针并在其上调用点运算符。如果这让你的头在旋转,现在就采取简单的解释,随着你对这种语言的反应越来越大,它会稍后沉沦。
头文件不是强制性的,但它们可用于引用另一个文件中翻译单元中声明的内容。因此,例如,您在头文件中声明MyClass,而不是在myfilea.cpp和myfileb.cpp中都可以使用它,而不必花费太多精力来声明它。
要正确理解您在使用以下语句时需要知道的头文件:
#include "myheader.h"
编译器的预处理器所做的是将myheader.h的所有内容复制并粘贴到包含它的文件中。由于编译器需要在使用它们之前了解类型(通常是类),因此在每个文件中都需要“重新声明类型是什么”。 实际上可以实现头文件中的所有内容,类似于看起来像Java代码的东西,然后在一个main.cpp文件中包含那些文件,但是代码将花费更长的时间来编译并且更难以遵循
答案 4 :(得分:0)
我认为你需要阅读一本关于C ++和C的书,' - >'和'。'不一样但差不多,头文件与编译器和内存布局有关。 C ++与实际的机器有关,而不是java,这意味着你必须以略微不同的方式思考编程。
我建议在C ++上阅读Bjarne Staustrups一书,或者至少浏览一下。如果C ++只是带有另一种语法的Java,那么就没有理由发明Java - 每种语言都有自己的应用程序,你需要在开始使用之前了解语言的含义。 : - )
答案 5 :(得分:0)
std::string str("foo");
std::string *str_p=new std::string("bar"); /
//Please use smart pointers in real code
std::cout << str.size() << " " << str_p->size();
所以基本上->
会使用指针而不是访问该类型的成员。
它也是平等的
(*str_p).size();
这里首先手动取消引用str_p,然后调用size成员函数。
答案 6 :(得分:0)
test->name
完全等于(*test).name
,而不是test.name
看看这个例子:
class A
{
B member;
};
如果你不包含B的定义,你就不能知道A类的大小。在java中,member
将是一个指针,所以这没用。