C++ 关于c+的2个初学者问题+;

C++ 关于c+的2个初学者问题+;,c++,c,header,C++,C,Header,1.->的用途是什么例如test->name与test.name相同吗 2.头文件的用途是什么?我习惯了其他编程语言,比如java,其中只需要一个文件(类文件)。我们需要使用头文件来声明所有内容吗?结构->成员 相当于 (*结构)。成员 因此,这是一条捷径。它取消引用指针结构并访问成员成员 a->b与(*a)相同。当a是指针时,b。对于同样的事情,它只是一种方便的语法。当a是一个类时,它调用a作为调用对象的类的操作符->。如果你不理解,那么不用担心,当你在C++中得到进一步的时候,你会。 头文件

1.->的用途是什么例如test->name与test.name相同吗


2.头文件的用途是什么?我习惯了其他编程语言,比如java,其中只需要一个文件(类文件)。我们需要使用头文件来声明所有内容吗?

结构->成员

相当于

(*结构)。成员

因此,这是一条捷径。它取消引用指针
结构
并访问成员
成员

  • a->b
    (*a)相同。当
    a
    是指针时,b
    。对于同样的事情,它只是一种方便的语法。当
    a
    是一个类时,它调用
    a
    作为调用对象的类的
    操作符->
    。如果你不理解,那么不用担心,当你在C++中得到进一步的时候,你会。
  • 头文件包含声明,而.cpp文件包含定义。当您想要编写可以从其他文件使用的函数时,需要它们。这是因为您可以拥有任意数量的结构声明(即变量、函数、类等),但该结构只能有一个定义。头文件包含在代码中的许多地方(每个需要使用其实现提供的功能的文件都包含头文件),并且每个包含头文件的.cpp文件都会编译一次,因此在头文件中只包含其中一个头文件是不可行的。实现文件(.cpp或.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
  • 标题用于在许多翻译单元中包含相同的定义,Java不使用它们,因为定义从来都不是必需的,所有对象都由指针使用 看看这个例子:

    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"