Возвращение разных типов переменных - PullRequest
2 голосов
/ 01 мая 2019

Извините, если мой заголовок немного вводит в заблуждение, не знаю, как описать проблему, с которой я столкнулся на данный момент.

По сути, мое задание - использовать наследование. Но моя проблема на данный момент в том, что я не уверен, как вернуть int и строки в одной и той же функции для отображения в другой функции.

Ниже приведен пример, надеюсь, это имеет больше смысла.

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

main.cpp:

#include <iostream>
#include "Text.h"

int main(){

    Text text1;
    text1.SetText("Arial", 12, "Black", "This is a sample text"); //String, int, string, string
    text1.PrintText();

    return 0;
}

Text.h:

#ifndef TEXT_H
#define TEXT_H

class Text{

    public:
        Text();
        void SetText(std::string font, int size,  std::string color, std::string data);
        void GetParameters(); /*This is the problem area. I have setText that will set it, but how do I return these values to use in PrintText if it has different variable types?*/
        void PrintText();

    private:
        std::string font;
        int size;
        std::string color;
        std::string data;
};

#endif // TEXT_H 

Text.cpp:

#include <iostream>
#include "Text.h"

Text::Text(){
}

void Text::SetText(std::string font, int size,  std::string color, std::string data){
    font = font;
    size = size;
    color = color;
    data = data;
}

void Text::GetParameters (){//Any pointers in this would be much appreciated.
}

void Text::PrintText(){
    cout <<"Text parameters are: "  <<GetParameters() <<endl;//this is where Im trying to simply display the font, size, color and data values.
}

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

Результат, которого я пытаюсь достичь, очень простой:

Text parameters are:
Font = Arial
Size = 12
Color = Black
Data = This is a sample text

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

Ответы [ 3 ]

3 голосов
/ 01 мая 2019

Похоже, вам нужно только вернуть строку в качестве вывода из функции GetParameters.Обратите внимание, что в настоящее время вы возвращаете void (ничего не возвращает).

Пример кода:

std::string Text::GetParameters() {
    std::string stringToReturn = "";
    stringToReturn += "Font = " + font + "\n";
    stringToReturn += "Size = " + std::to_string(size) + "\n";
    // leave it to you to figure out the rest of the function
    return stringToReturn;
}
2 голосов
/ 01 мая 2019

Функция std::string Text::GetParameters() уже охвачена другими ответами, но я хотел бы указать на ошибку в вашей реализации void Text::SetText:

void Text::SetText(std::string font, int size,  std::string color, std::string data){
    font = font;
    size = size;
    color = color;
    data = data;
}

Это ничего не делает, потому что font = font; просто устанавливает параметр font на то, что он уже есть, и аналогично для других параметров.Вместо этого попробуйте следующее:

void Text::SetText(std::string font, int size, std::string color, std::string data) {
    this->font = font;
    this->size = size;
    this->color = color;
    this->data = data;
}

Говоря this->font, вы говорите, что имеете в виду не параметр font, а поле font объекта.Теперь он правильно устанавливает поля для соответствующих параметров.

2 голосов
/ 01 мая 2019

Просто распечатайте данные членов:

void Text::PrintText()
{
    cout << "font: " << font << ", size: " << size << ", color: " << color
         << ", data: " << data << "\n";
}

Если вы хотите получить доступ к этим членам из функций, не являющихся членами, то добавьте общедоступные функции-члены-получатели:

class Text {
public:
    // ...

    const std::string& getFont() const { return font; }
    int getSize() const { return size; }
    const std::string& getColor() const { return color; }
    const std::string& getData() const { return data; }
};

Я рекомендуюпереименование закрытых переменных-членов, чтобы четко отличать их от открытых.Популярный способ - просто добавить подчеркивание к их имени:

class Text {
    // ...

private:
    std::string font_;
    int size_;
    std::string color_;
    std::string data_;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...