你好我开始学习c ++,我正在学习视频教程。
为简单起见,请考虑以下代码:
#include <iostream>
using namespace std;
class Test{
public:
Test();
void printCrap();
private:
protected:
};
Test::Test(){
};
void Test::printCrap(){
cout << "I don't get this yet..." << endl;
};
int main(){
Test testOne;
Test *testTwo = &testOne;
testOne.printCrap();
testTwo->printCrap();
return 0;
};
它类似于教程的代码,唯一的例外是我为了这个问题将代码合并为1 cpp。
教程没有解释的是明显的是实际的差异/好处是什么以及这在哪里适用。或许->
与.
重要的场景?
答案 0 :(得分:3)
testTwo->printCrap()
只是(*testTwo).printCrap()
的语法糖,仅此而已。
答案 1 :(得分:3)
简单地说,当您要调用的变量是实际对象或引用时,请使用.
。当变量是指向对象的指针时,请使用->
。
通常,更喜欢使用实际对象或引用对象。指针根据需要使用。您经常需要使用指针的一些情况是:
答案 2 :(得分:1)
这不是利益或差异的问题。如果你有一个指针,你需要取消引用它来访问成员。 ->
运算符等同于
testTwo->print();
(*testTwo).print(); // same thing.
如果您有实例(或参考),请使用
testTwo.print();
这是语言语法 - 它与首选项无关
答案 3 :(得分:1)
它只是一个记忆工作。当你分配它时
Test testOne;
当你指向它时,你只需要在内存中创建一个对象
Text *testTwo = &testOne;
你指向testOne时的同一位置。 您刚刚为内存的相同部分创建了另一个名称。 当你需要将这个东西传递给一个函数时,你不想创建全新的对象,但你只想指出它就像
function workWithObject(Test *testit)
因此,testit指向与testTwo相同的内存部分,它是textOne。
答案 4 :(得分:0)
。 (点)运算符和 - &gt; (箭头)运算符用于引用类,结构和联合的各个成员。
点运算符应用于实际对象。箭头运算符与指向对象的指针一起使用。
Test testOne;
Test* testTwo = &testOne;
这里testTwo是一个指向testOne内存位置的Test类型的指针变量,用testTwo访问Test类的成员需要解除引用,这是在 - &gt;的帮助下完成的。箭头操作员。
答案 5 :(得分:0)
通过将.
运算符应用于类testTwo的对象或将->
应用于类testTwo的指针,可以访问类的成员。箭头->
来自C时间并且是多余的。
同样在课堂上你不需要任何操作员。只需调用printCrap即可。如果你在静态成员函数中寻找,你可以使用:: f.e. testOne::staticPrint.
答案 6 :(得分:0)
成像你有另一个类Test2,它继承自你原来的Test。 Test2有自己的printCrap()函数版本。我们有两种方式致电:
//as member function
Test.printCrap();
Test2.printCrap();
//as pointer
ptr = &Test;
ptr->printCrap();
ptr = &Test2;
ptr->printCrap();
以上代码仅说明了用法,并未说明哪一个更好。