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

По сути, мое задание - использовать наследование. Но моя проблема на данный момент заключается в том, что я не уверен, как вернуть 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

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

2
B. Baxter 1 Май 2019 в 12:07

3 ответа

Лучший ответ

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

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_;
};
2
Nikos C. 1 Май 2019 в 09:24

Похоже, вам нужно только вернуть строку в качестве вывода из функции 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;
}
3
Blaze 1 Май 2019 в 09:24

Функция 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
Blaze 1 Май 2019 в 09:28