C ++: возможности использования указателя this с функциями get для замены операторов Cout

0

После того, как вы просто научились каскадировать множественные вызовы функций мутатора, определяя эти функции с типом возвращаемого типа "ссылка на объект класса С" (т.е. C & setHeight (int)) в сочетании с соответствующими "return * this" утверждениями, я бы очень очень хотелось бы знать, позволяет ли подобный метод возвращать члены данных объекта из одной функции "get".
У меня есть простой класс "счет-фактура" с объектом из другого класса "Дата". Этот объект-член данных содержит личные данные, которые хранят стандартную дату "даты покупки" гипотетического продукта (для которого был создан объект). Хотя в "Дате" три члена int хранят компоненты даты, я хотел бы как-то каскадировать вызовы к трем соответствующим функциям get, принадлежащим объекту Date, в моем аксессуре "даты покупки", поскольку появляется какой-то один accessor/get и потому, что этот стиль кажется предпочтительным для выполнения задачи с помощью инструкции cout. Другими словами, если для отображения полной даты необходимо использовать некоторую функцию get, я бы предпочел, чтобы она была отформатирована с одним вызовом в заявлении печати на клиенте (main), а не функцией, которая просто печатает форматированный оператор при вызове из main.

//Invoice.h

#ifndef DATE_H
#define DATE_H

#include "Date.h"
...using namespace std. (Assume all other necessary libraries, classes, are included)

class Invoice {

public:

Invoice(); // Default constructor
Invoice( Date &, string );
setDateOfPurchase( int, int, int );
getDateOfPurchase();

private:

Date DateOfPurchase;
string description;

}; // end class definition

#endif

Определение функции члена ниже...

//Invoice.cpp
#include "Date.h"
(Again, please assume the necessary inclusions are made here)


Invoice::Invoice(){ 

DateOfPurchase.month = 1;
DateOfPurchase.day = 1;
DateOfPurchase.year = 1999;
} // end Default constructor definition

Invoice::Invoice( Date &purchaseDate, string desc ):
DateOfPurchase( purchaseDate ),
description( desc )
{} // No body

Invoice &Invoice::setDateOP( int m, int d, int y ) {
// The Date class definition is not explicitly defined; please assume these simply accept
// one int argument each.
DateOfPurchase.setMonth( m );
DateOfPurchase.setDay( d );
DateOfPurchase.setYear( y );

return *this;
} // End mutator definition

Заголовок для моей функции доступа, предназначенный для получения полной даты, хранящейся в объекте DateOfPurchase, выглядит следующим образом:

Invoice &Invoice::getDateOrd(){

//gets month, day, and year, possibly through utilizing dereferenced 'this' pointer (*this)

} // end getDateOrd definition

функция main ниже...

В основном://Создание объекта Date, который будет передаваться по ссылке на конструктор счета-фактуры. Дата сегодня (11, 10, 2014);

Invoice firstSale( today, A corkscrew: product# 88090 );

// Cascading call to each member function of *member data object* DateOfPurchase
firstSale.setMonth( 11 ).setDay( 12 ).setYear( 2014 );   

Надеемся, это продемонстрирует базовое приложение каскадного вызова с "заданными" функциями. Теперь для "получить" функции... (Кстати, я использую Deitel & Deitel, 2013, 7-е издание)

  • 0
    Где код?
  • 0
    Просто реализуйте "toString ()" для класса Date.
Показать ещё 1 комментарий
Теги:
oop
this
accessor

1 ответ

0
Лучший ответ

Использовать << перегрузка оператора в классе Invoice

добавьте приведенный ниже код в свой класс Invoice.

friend ostream &operator<<( ostream &output,
                                 const Invoice  &invoice )
{
    output << "F : " << invoice.DateOfPurchase.dd << " " << invoice.DateOfPurchase.mm<<" "<<invoice.DateOfPurchase.yy;
   return output;
}

Вы можете напрямую позвонить как

Invoice invoice;
cout<<invoice;

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню