C++ 关于c+的2个初学者问题+;
1.->的用途是什么例如test->name与test.name相同吗C++ 关于c+的2个初学者问题+;,c++,c,header,C++,C,Header,1.->的用途是什么例如test->name与test.name相同吗 2.头文件的用途是什么?我习惯了其他编程语言,比如java,其中只需要一个文件(类文件)。我们需要使用头文件来声明所有内容吗?结构->成员 相当于 (*结构)。成员 因此,这是一条捷径。它取消引用指针结构并访问成员成员 a->b与(*a)相同。当a是指针时,b。对于同样的事情,它只是一种方便的语法。当a是一个类时,它调用a作为调用对象的类的操作符->。如果你不理解,那么不用担心,当你在C++中得到进一步的时候,你会。 头文件
2.头文件的用途是什么?我习惯了其他编程语言,比如java,其中只需要一个文件(类文件)。我们需要使用头文件来声明所有内容吗?
结构->成员
相当于
(*结构)。成员
因此,这是一条捷径。它取消引用指针结构
并访问成员成员
a->b
与(*a)相同。当a
是指针时,b
。对于同样的事情,它只是一种方便的语法。当a
是一个类时,它调用a
作为调用对象的类的操作符->
。如果你不理解,那么不用担心,当你在C++中得到进一步的时候,你会。但是,所有这些问题都会得到一本好的C++书籍的解答,所以请在读得太远之前买一本,这会节省很多时间和头痛。 < P>我认为你需要读一本关于C++和C的书,'->'与'.'不一样,但是几乎和头文件都与编译器和内存布局有关。C++比实际的java机器要多很多,这意味着你必须以一种稍微不同的方式来思考编程。 我建议阅读C++的Bjarne Staustrups书,或者至少浏览一下。如果C++只是java,它有另一种语法,就没有理由去发明java——语言都有自己的应用程序,在开始使用它之前,你需要了解语言是什么。p> 1)“arrow”操作符
->
与操作符
不同,但当您使用指向结构的指针而不仅仅是结构时,它是一种快捷方式。例如,见:
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
文件的开头添加声明,但是将声明和实际代码分开是一种有用的约定
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成员函数
test->name
完全等于(*test).name
,而不是test.name
class A
{
B member;
};
如果不包含B的定义,就无法知道类A的大小。在java中,
成员将是一个指针,因此这是无用的。好吧,我将尝试用一种简单的方式进行解释,以便于初学者更好地理解
是的,它和点一样,但它是用来做指针的
MyClass a;
a.myMethod();
MyClass* b = new MyClass;
b->myMethod();
delete b;
a和b都调用相同的方法,但a在堆中分配,b是由new分配的指针。分配的内存显式性应始终解除分配(因此delete b语句)。
这实际上是一种简化,箭头所做的是取消对指针的引用,并在其上调用点运算符。如果这让你一时头晕目眩,现在就简单地解释一下,随着你对这门语言越来越熟悉,它会慢慢消失
头文件不是必须的,但它们可用于引用另一个翻译单元中在翻译单元中声明的内容。例如,您可以在头中声明MyClass,这样就可以在myfilea.cpp和myfileb.cpp中使用它,而无需多次声明
要正确理解头文件,您需要知道,当您使用以下语句时:
#include "myheader.h"
编译器的预处理器所做的是将myheader.h的所有内容复制并粘贴到包含它的文件中。因为编译器在使用类型(通常是类)之前需要了解它们,所以在每个文件中,您需要“重新声明类型”。
实际上,完全有可能在头文件中实现所有内容,类似于Java代码,然后在一个main.cpp文件中包含这些文件,但是编译代码将花费更长的时间,并且更难理解
这两个问题都会在任何一本书的前几章中得到回答。@OliCharlesworth他所说的实际上是我所听过的对这一问题的最好回答……好吧,然后是任何一本像样的在线初学者教程。只要搜索“初学者c++”,我会推荐这个,因为你来自java:我还记得我刚开始学习c时,很难理解标题。很多书都不会解释它。12年来我一直在做C++,所以现在很自然,但不是12年前。为什么括号里有结构?它们是括号,用于操作顺序。@ UmNyobe,它取消了指针<代码> A<代码> > <代码> < <代码>是指针或调用<代码>操作符*>代码>如果代码> A<代码>是一个类实例。谢谢塞思。我是在说,但如果他不知道a->是什么意思,也许他也不知道*a。@UmNyobe如果他不知道的话。。。我都不知道
#include "myheader.h"