1.使用 - >例如test->名稱與test.name相同?2初學者有關C++的問題
2.頭文件用於什麼?我習慣於其他編程語言,如java,你只需要一個文件(類文件)。我們是否需要使用頭文件來聲明所有的東西?
1.使用 - >例如test->名稱與test.name相同?2初學者有關C++的問題
2.頭文件用於什麼?我習慣於其他編程語言,如java,你只需要一個文件(類文件)。我們是否需要使用頭文件來聲明所有的東西?
那麼,我會試着用簡單的方式來解釋一下,讓初學者更容易理解。
是的,它和點一樣,但它用於指針。
MyClass a;
a.myMethod();
MyClass* b = new MyClass;
b->myMethod();
delete b;
a和b都調用相同的方法,但a分配在堆中,b是由new分配的指針。內存的顯式分配應該總是被解除分配(因此刪除B語句)。 這實際上是一個簡化,箭頭所做的是取消引用指針並將點操作符稱爲它。如果現在讓你的頭腦轉動,現在就做簡單的解釋,隨着你變得更加習慣於語言,它會沉下去。
頭文件不是強制性的,但它們是有用的,用於引用在另一個翻譯單元中聲明的內容。因此,例如,您可以在頭文件中聲明MyClass,而不用在myfilea.cpp和myfileb.cpp中使用MyClass,而不必多次聲明它。
要正確理解,你需要知道,當你使用像語句的頭文件:
#include "myheader.h"
編譯器的預處理程序所做的什麼是副本和myheader.h的所有內容粘貼到它包含的文件。由於編譯器在讓你使用它們之前需要知道類型(通常是類),所以在每個文件中你需要「重新聲明類型是什麼」。 實際上,實際上可能在頭文件中實現所有內容,類似於Java代碼,然後在一個main.cpp文件中包含這些文件,但代碼編譯所需的時間會更長,而且會更難跟隨。
a->b
相同(*a).b
當a
是一個指針。對於同樣的事情,這只是方便的語法。當a
是一個類時,它調用該類的operator->
作爲調用對象,其中a
。如果你不明白這一點,那麼不用擔心,當你進一步使用C++時,你會的。但是,所有這些問題都可以通過一本好的C++書來解答,所以請在購買之前仔細閱讀,這會節省很多時間和頭痛。
我想你需要閱讀一本關於C++和C的書,' - >'與''不一樣。但幾乎和頭文件都與編譯器和內存佈局有關。 C++比Java更關注實際的機器,這意味着你必須以不同的方式思考編程。
我推薦閱讀Bjarne Staustrups關於C++的書,或者至少瀏覽它。如果C++只是帶有其他語法的Java,那麼就沒有理由去發明Java了 - 每種語言都有它們的應用程序,並且在開始使用它之前,您需要了解語言的含義。 :-)
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
文件的開頭添加的聲明,但它是有聲明和實際代碼很有用的約定分隔。
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();
所以基本上->
deferences指針比訪問類型的成員。
據equivelent太
(*str_p).size();
這裏str_p首先手動解除引用然後大小成員函數調用。
test->name
完全等於(*test).name
,不test.name
請看下面的例子:
class A
{
B member;
};
如果不包括B的定義,你可以不知道A級在java中的大小,member
將是一個指針,所以這是無用。
這兩個問題將在任的前幾章來回答[體面的入門書對C++](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and -list)。 – 2012-02-25 16:48:29
以及我沒有書 – John 2012-02-25 16:48:53
@OliCharlesworth他所說的其實是我聽過的最好的迴應... – 2012-02-25 16:51:21