2015-06-22 7 views
0

Я очень смущен относительно того, какие переменные я бы включил в свою функцию здесь: имена. Я делаю проблему с практикой в ​​книге на C++, потому что сейчас изучаю C++ и нахожусь в ссылках и указателях, и не могу найти решение.Параметры, используемые в ссылочной функции C++

Просто для получения справочной информации, проблема спрашивает:

Написать функцию, которая предлагает пользователю ввести свое имя и фамилию, как два отдельных значений.
Эта функция должна возвращать оба значения вызывающему абоненту через дополнительные параметры указателя (или ссылки), которые передаются функции.
Попробуйте сделать это сначала с указателями, а затем со ссылками.

#include <iostream> 
#include <string> 
#include <istream> 

using namespace std; 

struct someStruct{ 
    string firstname; 
    string lastname; 
}; 

void names(someStruct &firstname, someStruct &lastname) { 
    cout << "First Name: " << "\n"; 
    cin >> firstname.firstname; 
    cout << "Last Name: " << "\n"; 
    cin >> lastname.lastname; 
    // I was just curious is adding firstname to firstname would work... and  it did 
    cout << lastname.lastname << ", " << firstname.firstname; 
    cin.get(); 
} 

int main() { 
    names(); 
    // I don't know what to put here, above, as parameters 
    cin.get(); 
} 
+0

Вы знаете, как это сделать, если 'имен()' взяли указатели? – Barry

ответ

1

Ваш код не имеет смысла, почему вы проходящее someStruct дважды?

Для эталонного части, вы должны иметь что-то вроде:

void names(someStruct &s) { // <<<< Pass struct once as a reference 
    cout << "First Name: " << "\n"; 
    cin >> s.firstname; 
    cout << "Last Name: " << "\n"; 
    cin >> s.lastname; 
} 

и в main():

int main() { 
    someStruct x; // <<<< Create an instance of someStruct 
    names(x); // <<<< Pass it as parameter 

    cout << "Input was: firstName = " << x.firstname 
     << ", lastName = " << x.lastname 
     << endl; 
    cin.get(); 
} 

Для указателя части, вы должны иметь что-то вроде :

void names(someStruct *s) { // <<<< Pass struct once as a reference 
    cout << "First Name: " << "\n"; 
    cin >> s->firstname; 
     // ^^ Note the difference in dereferencing 
    cout << "Last Name: " << "\n"; 
    cin >> s->lastname; 
     // ^^ Note the difference in dereferencing 
} 

и main():

int main() { 
    someStruct x; // <<<< Create an instance of someStruct 
    names(&x); // <<<< Pass the address of x as parameter 
     //^Note the addess-of operator here 

    cout << "Input was: firstName = " << x.firstname 
     << ", lastName = " << x.lastname 
     << endl; 
    cin.get(); 
} 
+0

О, я так не думал об этом. Спасибо. –

+0

Кроме того, я думал, что всякий раз, когда вы устанавливаете параметры, содержащие ссылки, в функции, они должны указывать на инициализированное значение. Или, задав параметр, инициализируйте значение? Я смущен тем, как работает эта функция, когда она ссылается на значение, которое не инициализируется нигде. Объяснение поможет. –

+0

Значения @MaxKhan инициализируются созданным компилятором конструктором по умолчанию 'someStruct', используя конструкторы по умолчанию для содержащихся переменных-членов (' std :: string :: string() 'для вашего case => empty' string'), если только вы самостоятельно определите конструктор по умолчанию и инициализируйте их с помощью [_member initializer list_] (http://stackoverflow.com/questions/7665021/c-member-initialization-list). –

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