如何返回指向对象的指针,以便在访问对象方法的函数中使用?

时间:2015-08-10 06:00:59

标签: c++ pointers

我到处都是,我在这里找不到一个明确的答案。或许我找到了答案,但我完全不理解。

我有3个对象:

Foo Object1;
Foo Object2;
Foo Object3;

我有一个功能,用户从与对象相关的字符串列表中选择。当用户输入时,说" B",我想现在对Object2执行操作。

这基本上就是我所拥有的。

string getOption()
{
    string option;

    cout << "Option Menu" << endl;
    cout << "A - Option 1" << endl;    // Object1
    cout << "B - Option 2" << Lendl;   // Object2
    cout << "C - Option 3" << endl;    // Object3

    cin >> option;

    return option;

现在我有输入,我想在对象上执行许多选项。类似的东西:

void modifyFooString(foo userSelectedObject)
{
    // Local variables
    string userInput;


    userInput = readInput(); // Function that reads valid input

    userSelectedObject.setMethod(userInput);
}

但功能众多。它处于while循环中,因此我需要修改对象,然后重新提示用户是否要对其他对象进行更改。

当我看到这个问题时,我认为可以使用指针。例如:

void getOption(Foo* &choice)
{
    string option;

    cout << "Option Menu" << endl;
    cout << "A - Option 1" << endl;    // Object1
    cout << "B - Option 2" << Lendl;   // Object2
    cout << "C - Option 3" << endl;    // Object3

    cin >> option;

    if (option == "A")
        choice = &Object1;

    else if (option == "A")
        choice = &Object2;

    if (option == "A")
        choice = &Object3;
}

理想情况下,我现在可以在执行getOption()函数的函数中使用指针来修改所选对象。但是,当我尝试像这样实现它时,它只是不起作用。

如何返回可用于修改所选对象的指针?

由于

3 个答案:

答案 0 :(得分:1)

可能会取得更大的成功
if (option == "A")
    choice = &Object1;
else if (option == "B")
    choice = &Object2;
else if (option == "C")
    choice = &Object3;

你还应该澄清它不起作用的内容&#39;实际上意味着。

由于你想返回某些东西,使用C ++ return语句更自然。

Foo* getOption()
{
    ...
    if (option == "A")
        return &Object1;
    else if (option == "B")
        return &Object2;
    else if (option == "C")
        return &Object3;

答案 1 :(得分:0)

与约翰的答案相同,但if-else-ladder被我认为更清楚的东西取代:)

Foo* getOption() {
   ...
   return option == "A" ? &Object1 :
          option == "B" ? &Object2 :
          option == "C" ? &Object3 :
                          nullptr  ;
}

答案 2 :(得分:0)

问题的最小例子,

#include "stdafx.h"
#include <iostream>
#include <conio.h>

using namespace std;
class Foo
{
public:
    int id;
    int data;
    Foo(int tid,int tdata)
    {
        id = tid;
        data = tdata;
    }
};

Foo *Object1 = new Foo(1,0);
Foo *Object2 = new Foo(2,0);
Foo *Object3 = new Foo(3,0);

Foo* getOption()
{
    char option;

    cout << "Option Menu" << endl;
    cout << "A - Option 1" << endl;    // Object1
    cout << "B - Option 2" << endl;   // Object2
    cout << "C - Option 3" << endl;    // Object3

    cin >> option;

    switch (option)
    {
    case 'A':
        return Object1;
        break;
    case 'B':
        return Object2;
        break;
    case 'C':
        return Object3;
        break;
    default:
        cout << option ;
        break;
    }
        return 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
    cout << (getOption())->id;
    _getch();
    return 0;
}

在此示例中,您将回答

  

1 for option == A

     

2 for option == B

     

3 for option == C

我所做的主要改变是,

1. changed

    if (option == "A") // comparing A
        choice = &Object1;

    else if (option == "A") // Comparing B
        choice = &Object2;

    if (option == "A") //comparing C
        choice = &Object3;

to 

  switch (option)
    {
    case 'A':
        return Object1;
        break;
    case 'B':
        return Object2;
        break;
    case 'C':
        return Object3;
        break;
    default:
        cout << option ;
        break;
    }

2. changed
 option == "A" to  option == 'A' format // when I have used if instead of switch

尝试这个,让我知道它是否对你有帮助