"Здравствуй, Мир!" программа с использованием класса для печати


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

/*
"   To Print A Line On The Display Screen"
    Date:5th January 2011
    Programmer:Fahad
*/
#include <iostream>
using namespace std;
class Print
{
    public:
        void print_();
};
int main()
{
    Print Obj;
    Obj.print_();
    system( "pause" );
    return 0;
}
void Print::print_()
{
    cout << "I am in print function and the program runs fine." << endl;
}


4356
13
задан 4 февраля 2011 в 04:02 Источник Поделиться
Комментарии
6 ответов

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

Например, это выглядит необычно.

Print Obj;
Obj.print_();

Я предпочитаю:

Print obj;
obj.print();

Это просто конвенции, но быть в состоянии легко определить имена, которые обозначают типы помогает, если вы начнете использовать более сложные выражения. Например:

Print().print();

Лично я бы также избежать системы("пауза"). Нужно включать либо или чтобы использовать его. Хотя сам системный вызов является стандартным C++ (из стандартной библиотеки C), что вы передаете это зависит от системы.

В общем я не верю, что вы должны сделать ваши программы искусственно остановить. Если они предназначены для запуска в терминале, то терминал будет способен увидеть выход даже после того, как программа завершает свою работу.

19
ответ дан 4 февраля 2011 в 04:02 Источник Поделиться

В дополнение к тому, что Билли сказал, Я нахожу в obj.print_() выглядеть странно в C++ код. Я бы просто сделал имя метода печати().

11
ответ дан 4 февраля 2011 в 04:02 Источник Поделиться

Не уверен, что вы подразумеваете под стиль кодирования. Если ты про отступы и такие, вот изменения, которые я сделал бы. Обратите внимание, что это совершенно субъективная и люди, вероятно, согласятся со мной.

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

Пример кода:

class Example
{
int a; //Shouldn't this line
public:
void MyFunc(); //Indent to the same place this one does?
};

class Ahhhhh
{
int a; //Ahhh.. we match now :)
public:
void MyFunc();
};

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

Мне бы снять с помощью пространства имен STD; и явно претендовать те участники, которые в СТД. Действительно воняет, чтобы получить неприятное сообщение об ошибке от компилятора, потому что вы определили функцию с именем копия (которые могут конфликтовать с СТД::копировать).

система("пауза"); должен быть с std::Кин.получить();

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

10
ответ дан 4 февраля 2011 в 04:02 Источник Поделиться

Единственное, что это не C++, как для меня это:

Obj.print_();

Это тесно соединяет метод печати на определенном методе производства.
Было бы лучше, чтобы позволить пользователю объекта, чтобы определить, какой метод вывода:

std::cout << Obj << "\n";

А значит, вы должны определить оператор вывода для объекта:

std::ostream& operator<<(std::ostream& str, Print const& data)
{
// STUFF
return str;
}

Хотя не технически неправильно. Я не фанат подчеркивания на концах идентификаторы:

print_()

Выглядит странно для меня. Но это дело стиля. Вижу вы местный стандарт кодирования для Правила. Если ты положил его на фронте, я был бы намного больше complainey об этом.

Система трудно использовать кросс-платформенный. Особенно, когда вы делаете системы("пауза").

system( "pause" );

Я предпочитаю платформу нейтральный:

std::cout << "Hit Enter to continue\n";
std::cin.clear();
char plop;
std::cin >> plop; // cin is buffered. So nothing is sent until you hit enter.

8
ответ дан 4 февраля 2011 в 09:02 Источник Поделиться

При таких обстоятельствах , используя директивы, кажется очень подозрительной. В то время как есть времена/места, что это полезно, это не кажется (мне), чтобы быть одним из них.

Имя типичного класса должно быть существительным, а не глаголом. Глагол сигналы о том, что у вас это разовая акция, которая не является хорошим кандидатом для нормального класса. Если это будет класс вообще, надо, наверное, быть функтором. Я бы также добавить параметр (по умолчанию значение), поэтому было бы легко использовать поток других, чем с std::соиь когда/если необходимо:

struct Print { 
std::ostream &operator()(std::ostream &os = std::cout) {
return os << "whatever\n";
}
};

Используя системы("пауза"); тоже совсем не портативный. Если вы хотите, чтобы ждать нажатия клавиши перед завершением программы, как правило, лучше включить в свой код:

void pause() { 
std::cout << "Press \"enter\" when ready.\n";
getchar();
}

int main() {
Print()();
pause();
return 0;
}

Честно говоря, даже используя функтор, как мне кажется, глупо в этом случае хотя-ты принимаешь что-то простое (распечатать строку) и делает его гораздо более сложным, не получая ничего взамен. Учитывая то, насколько мало делает программа, в печати класса выполняет ничего полезного или позитивного вообще.

7
ответ дан 4 февраля 2011 в 06:02 Источник Поделиться

Я предпочитаю видеть имена классов, имена существительные и имена методов, которые являются глаголы. Печать может читать лучше, как принтер, ObjectPrinter или WhateverPrinter.

Я видел _ - суффикс (или приставка бы) для обозначения членов совсем немного, но я никогда не нашел это полезно, чтобы прикрепить такое украшение к имени.

6
ответ дан 4 февраля 2011 в 06:02 Источник Поделиться