2014-10-08 2 views
-2

Я хочу вывести значения частных членов класса Bankcode и AgentName. Как это сделать из моей функции main() или вообще за пределами класса BOURNE.Как вы можете получить доступ к приватным строковым переменным, используя функции-члены?

Мои первоначальные попытки код ниже:

#include <iostream> 
#include <string> 
using namespace std; 

class BOURNE 
{ 
    string Bankcode ={"THE SECRET CODE IS 00071712014"} ; /*private by default*/ 

    string AgentName={"Jason Bourne"};     /*private by default*/ 
public:  
    void tryToGetSecretCodeandName(string theName ,string theCode); //trying to get the private 

    void trytoGetAgentName(string name); // try to get name 
}; 
//***********************defining member function************************************** 

void BOURNE::tryToGetSecretCodeandName(string theName, string theCode) //member defining function 
{ 
    Bankcode=theCode; //equalling name to the code here 

    AgentName=theName; //the samething here 

    cout<<theCode<<"\n"<<theName; //printing out the values 
} 
//************************main function***************************** 
int main() 
{ 
    BOURNE justAnyObject; //making an object to the class 
    justAnyObject.tryToGetSecretCodeandName(); 
    return 0;  
} 
+0

В чем вопрос? Вы можете установить значения таким образом, но он не скажет вам, что изначально они были – chrisb2244

+0

Я этого не понимаю. Ничто в коде не пытается получить значения частных членов. –

+0

Посмотрите, мне нужна только эта строка cout << theCode << "\ n" << theName; но, как вы видите, я не могу распечатать имя BankCode adn Agent, просто ничего не печатайте на экране, мой вопрос в том, почему он работает для int, но не для строки или символов? почему я не могу получить доступ к private в классе со строковым типом? – babylon

ответ

1

Третий ответ

Ваш код имеет две функции в стиле «геттер», но ни один не принимает никаких аргументов. То есть, обе ваши функции требуют передачи аргументов.

Ваша основная функция - вызвать get...CodeandName(), у которого нет аргументов. Таким образом, вы получаете ошибку компилятора, вероятно, жалуетесь на действительные сигнатуры или переданные аргументы.

Отредактированного Ответ Если вы хотите, чтобы получить значение, типичное (насколько мне известно) осуществление что-то вроде

std::string BOURNE::getCode() 
{ 
    return Bankcode; 
} 

std::string BOURNE::getName() 
{ 
    return AgentName; 
} 

int main() 
{ 
    BOURNE myAgent; 
    cout<< "The agent's name is : " << myAgent.getName() << endl; 
    cout<< "The agent's code is : " << myAgent.getCode() << endl; 
} 

оригинального ответа, оставило, потому что я чувствую, как это более полезным

Я подозреваю, что вы спрашиваете, если вы могли бы сделать что-то вроде

void BOURNE::tryToGetSecretCodeandName(string theName, string theCode) 
{ 
    if (Bankcode == theCode) { 
     cout<< "You correctly guessed the code : " << Bankcode << endl; 
    } 
    if (AgentName == theName) { 
     cout << "You correctly guessed the agent's name : " << AgentName << endl; 
    } 
} 

Это позволит вам многократно угадывать имя и получать вывод, когда вы правы.

Если вы хотите, чтобы отключить этот вид угадывания, то вы могли бы рассмотреть вопрос о создании нового класса (возможно, полученный из/на основе std::string - но видеть this question по причинам, чтобы быть осторожным!) И реализовать operator== функцию, которая всегда возвращается false ,

+0

, пожалуйста, все, что мне нужно, чтобы напечатать Bankcode и AgentName, но он не будет компилироваться, и это похоже на то, что я не могу получить к ним доступ? Я не понимаю, он работает для int, но не для строки или символов, пожалуйста, помогите – babylon

+0

Отредактировано, чтобы отразить ваш запрос - если это то, что вы хотели сказать, и я буду убирать. – chrisb2244

+0

Знаешь что? Я изучаю C++, и я хочу понять его логически, я знаю другие способы показать этот код и работать, но все, что я хочу, это понять, где моя ошибка, и что с ним не так, Return-Type class-name :: function-name (объявления аргументов) {function-body}, это должно работать, но почему не работает со мной? – babylon

Смежные вопросы