使用指针vs对象访问成员函数

时间:2013-12-30 12:51:00

标签: c++

你好我开始学习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。

教程没有解释的是明显的是实际的差异/好处是什么以及这在哪里适用。或许->.重要的场景?

7 个答案:

答案 0 :(得分:3)

testTwo->printCrap()只是(*testTwo).printCrap()的语法糖,仅此而已。

答案 1 :(得分:3)

简单地说,当您要调用的变量是实际对象或引用时,请使用.。当变量是指向对象的指针时,请使用->

通常,更喜欢使用实际对象或引用对象。指针根据需要使用。您经常需要使用指针的一些情况是:

  1. 使用多态“
  2. 当您需要该对象超过创建它的范围时

答案 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(); 

以上代码仅说明了用法,并未说明哪一个更好。