Re: Exceptional C++ Book Item 32 Interface Principle
Peter_APIIT wrote:
In this book, herb sutter stated that a function consider as MF when
it fullfill two requirements
a) Mention X
b) Are supplied with X
Assume X is a class.
I don't get this. What this statement means ?
It means that the interface provided by a class X consists of:
- The (public & protected) members of class X
- Non-member functions that take (a reference/pointer to) X as argument
and are declared in the same header as X (or otherwise documented as
logically belonging to X).
Take for example this class:
class BigInt {
private:
// omitted
public:
BigInt();
BigInt(long);
BigInt(const std::string&);
BigInt(const BigInt&);
~BigInt();
BigInt& operator=(const BigInt&);
BigInt& operator+=(const BigInt&);
BigInt& operator-=(const BigInt&);
BigInt& operator*=(const BigInt&);
BigInt& operator/=(const BigInt&);
long to_long() const;
std::string to_string() const;
};
BigInt operator+(const BigInt&, const BigInt&);
BigInt operator-(const BigInt&, const BigInt&);
BigInt operator*(const BigInt&, const BigInt&);
BigInt operator/(const BigInt&, const BigInt&);
std::ostream& operator<<(std::ostream&, const BigInt&);
std::istream& operator>>(std::istream&, const BigInt&);
Are there any functions here that you would NOT count as contributing to
the interface that BigInt provides to its users?
Just remember: Interface (here) == The collection of operations that a
type provides to its users.
Recently, i encountered a situation that which require to apply this
principle. To ease the explanation, i have attach the code below.
[code]
class Administrator : public Human
{
private:
boost::shared_ptr<StaffInfo> theStaffInfo;
public:
Administrator();
Administrator(const std::string&, const std::string&);
~Administrator();
void Add();
void Delete();
void Modified();
void Search();
// To Do wraps all in Administrator Impl
void DisplayAllStaff();
void TimeIn();
void TimeOut();
void Logout();
void Exit();
// Extra function
void SystemMaintenance();
void RenewLiciense();
void InstallPlugIn();
[/code]
There are only two MF use the private member which are Add() and
Modified(). All others are just MF that does not use private member
variable.
Question:
1. Can anyone explain the interface principle based on this example ?
I am not sure I understand your question.
You provided (part of) a class declaration with a number of public
member functions. The interface principle states that member functions
are part of the interface of a class by definition. There is not much to
explain here.
Thanks for any help.
Bart v Ingen Schenau
--
a.c.l.l.c-c++ FAQ: http://www.comeaucomputing.com/learn/faq
c.l.c FAQ: http://c-faq.com/
c.l.c++ FAQ: http://www.parashift.com/c++-faq-lite/
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]