On Mar 31, 8:25 pm, PerfectReign <perfectre...@xr4ti.cotse.net> wrote:
On Sat, 31 Mar 2007 17:18:29 -0700, a rock fell the sky, hitting
virtualadepts on the head, and inspiring the following:
I have code here that explains my object oriented design model. I've
been reading about other design models from what is documented on
wikipedia about the key book on the subject:
http://en.wikipedia.org/wiki/Design_patterns
All of the models look fun and interesting but they are very
specialized. I find myself writing bloated C++ code anyway, and not
finding a way to use the basic design models. So I've invented my own.
I call it recursive container design. The idea is to use a container
like a vector, or in my example a map, and do all of the work within
your container inside of the class. This keeps your code very neat. It
may seem redundant at first, but it keeps all of your code organized in
an easy to read and understand classes. This code really reduced the
size of my main function and created a neat little class that directly
relates to what I'm doing.
The only problem is that the code runs into problems after it is
compiled. The search_Name function in my program fails to lookup the
key pair for the data entered into the database. This is probably
because I've never worked with object oriented design before, and
haven't done anything with this particular container before either.
So if anyone is willing to fix up my code, I'll send you a free i- pod!
No one wanted to play my last contest, and I think this one is more
educational and far easier.
#include <utility>
#include <iostream>
#include <string>
#include <map>
using namespace std;
class Bookz : public map<string, string> {
public:
Bookz() {
cout << "Welcome to the database. Enter information, and type
'end'
to stop."<< endl;
cout << "Name: ";
}
void add(string name, string number){
typedef pair <string, string> b_Pair; insert( b_Pair(name,
number) );
}
~Bookz(){}
void search_Name(string lookup_Num){
map <string, string> :: const_iterator b_Name; b_Name =
find(lookup_Num);
cout << b_Name -> second << "." << endl;
}
};
int main( void ) {
Bookz keeper;
string s="";
string n="";
while (s!="end" || n!="end"){
cin >> s;
if(s=="end"){cout <<"Finished inputing
data."<<endl<<endl;
break;}
cout<<"Number: ";
cin >> n;
if(n=="end"){cout <<"Finished inputing
data."<<endl<<endl;
break;}
keeper.add(s,n);
cout <<"Name: ";
}
cout << "To search the database enter a name or number. 'quit'
exists."<<endl;
while (s != "quit"){
cout<<"$ ";
cin >> s;
keeper.search_Name(s);
}
if (s == "quit")
cout<<"Goodbye."<<endl;;
}
You're missing a goto in there, I think.
In any case, when you create a class - say books - then you want to have
two things: methods and properties.
You're gonna need a set of properties about the books and a whole
shitload of methods to call from whatever other class you have.
Also, you're confusing your books class with whatever presentation class
you should have. Please separate them.
--
k
I WIN! My Object Oriented Code FLYS LIKE A EAGLE!!! I found the bug,
and corrected it. All I needed to do is go back and re-read about the
error I was encountering. YAY!
#include <utility>
#include <iostream>
#include <string>
#include <map>
using namespace std;
class Bookz : public map<string, string>
{
public:
Bookz() {
cout << "Welcome to the database. Enter information, and type 'end'
to stop."<< endl;
cout << "Name: ";
}
void add(string name, string number){
typedef pair <string, string> b_Pair;
insert( b_Pair(name, number) );
}
~Bookz(){}
void search_Name(string lookup_Num){
cout << find(lookup_Num) -> second << "." << endl;
}
};
int main( void ) {
Bookz keeper;
string s="";
string n="";
while (s!="end" || n!="end"){
cin >> s;
if(s=="end"){cout <<"Finished inputing data."<<endl<<endl;
break;}
cout<<"Number: ";
cin >> n;
if(n=="end"){cout <<"Finished inputing data."<<endl<<endl;
break;}
keeper.add(s,n);
cout <<"Name: ";
}
cout << "To search the database enter a name or number. 'quit'
exists."<<endl;
while (s != "quit"){
cout<<"$ ";
cin >> s;
keeper.search_Name(s);
}
if (s == "quit")
cout<<"Goodbye."<<endl;;
}