اینم یه برنامه نسبتا خوب در مورد کار با اصول شئ گرایی در ++C هست.
این برنامه مربوط به پیاده سازی نظریه مجموعه ها به زبان ++C هست که امروز با همکاری دوست خوبم mortezamsp تکمیلش کردیم.
در این برنامه از سازنده،سازنده کپی،سرباگذاری عملگرهای << و >> و + و - و =+ و = و ^ ،تعریف توابع خارج از کلاس و بعضی موارد دیگر استفاده شده.
تنها مشکلی که این برنامه می تونه داشته باشه اینه که با حافظه پویا پیاده سازی نشده،من چون فعلا وقت ندارم از دوستان می خوام که این کار رو انجام بدن و اگه کسی انجام نداد خودم یه چند روزه دیگه انجامش میدم.
امیدوارم مفید واقع بشه.
#include<iostream.h>
#include<conio.h>
#define maxsize 20
//=================================================
class Intset
{
private:
int ma[maxsize],topindex;
public:
Intset();
void insert(int);
Intset operator+=(Intset);
Intset operator-=(Intset);
int found(int);
void print(ostream & o);
Intset operator+(Intset);
Intset operator^(Intset);
Intset operator-(Intset);
int get(int);
int card();
void makeempty();
friend ostream & operator << (ostream & ,Intset);
};
//=================================================
Intset :: Intset()
{
topindex=-1;
}
void Intset :: insert(int x)
{
if(topindex==maxsize-1)
cout<<"\n=======\ninsert error : stack is full !\n=======\n";
else{
if(!found(x))
ma[++topindex]=x;
}
}
ostream & operator <<(ostream & o ,Intset a)
{
a.print(o);
return o;
}
Intset Intset :: operator+=(Intset b)
{
for(int i=0;i<=b.card()-1;i++)
insert(b.get(i));
return *this ;
}
Intset Intset :: operator-=(Intset b)
{
Intset rezualt ;
for( int i=0 ; i<=topindex ;i++ )
rezualt.insert( get(i) ) ;
makeempty() ;
for( i=0 ;i<=rezualt.topindex ;i++ )
if( !b.found( rezualt.get(i) ) )
insert( rezualt.get(i) ) ;
return rezualt ;
}
void Intset :: print(ostream & o)
{
if(topindex==-1)
o<<"Empty";
else
{
o<<"{";
for(int i=0;i<=topindex;i++)
o<<ma[i]<<",";
o<<"}";
}
}
Intset Intset :: operator+(Intset b)
{
Intset c;
for(int i=0;i<=card()-1;i++)
c.insert(get(i));
for(i=0;i<=b.card()-1;i++)
c.insert(b.get(i));
return c;
}
Intset Intset :: operator^(Intset b)
{
Intset c;
for(int i=0;i<=card()-1;i++)
for(int j=0;j<=b.card()-1;j++)
if(found(get(i)&&b.found(get(i)) ) )
c.insert(get(i));
return c;
}
Intset Intset :: operator-(Intset b)
{
Intset c;
for(int i=0;i<=card()-1;i++)
if(!b.found(get(i)) )
c.insert(get(i));
return c;
}
int Intset :: get(int i)
{
return ma[i];
}
int Intset :: card()
{
return topindex+1;
}
void Intset :: makeempty()
{
topindex=-1;
}
int Intset :: found(int x)
{
int i=( i<topindex? i : topindex );
for( i=0 ; i<=topindex ;i++ )
if(ma[i]==x)
return 1 ;
return 0 ;
}
//=================================================
int main()
{
clrscr();
Intset a,b1;
int b;
cout<<"\n=======Get a{} ";
for(int i=1;i<=5;i++)
{
cout<<"\nEnter number a{"<<i<<"} :";
cin>>b;
a.insert(b);
}
cout<<"\na{} :"<<a<<endl;
cout<<"\n=======Get b1{} :";
for( i=1;i<=3;i++)
{
cout<<"\nEnter number b1{"<<i<<"} :";
cin>>b;
b1.insert(b);
}
cout<<"\nb1{} :"<<b1<<endl;
Intset c;
cout<<"\n=======\nnew intset c :"<<c<<endl<<"press any key";
getch();
c=b1;
cout<<"\n=======\nc=b1 ==>c :"<<c<<endl<<"press any key";
getch();
c+=a;
cout<<"\n=======\nc+=a ==>c :"<<c<<endl<<"press any key";
getch();
c-=a;
cout<<"\n=======\nc-=a ==>c :"<<c<<endl<<"press any key";
getch();
c=a+b1;
cout<<"\n=======\nc=a+b1 ==>c :"<<c<<endl<<"press any key";
getch();
c=a-b1;
cout<<"\n=======\nc=a-b1 ==>c :"<<c<<endl<<"press any key";
getch();
c=a^b1;
cout<<"\n=======\nc=a^b1 ==>c :"<<c<<endl<<"press any key";
getch();
return 0 ;
}