您的位置:首页 > 编程语言 > C语言/C++

再读C++ Primer 写了个小例子——练习多态虚函数的特性(08-01-25)

2008-03-19 22:08 489 查看
 再读C++ Primer 写了个小例子——练习多态虚函数的特性


#pragma once




class Animal




...{


public:


    //操作


    Animal(void);


//    Animal(int i);


    virtual ~Animal(void);


    virtual void ShowMe() = 0;


    int getAnimalType();


protected:


    int animalType;


};




#include "StdAfx.h"


#include ".animal.h"




Animal::Animal(void)




...{


}


//Animal::Animal(int i)


//{


//    animalType = i;


//}


Animal::~Animal(void)




...{


}


int Animal::getAnimalType()




...{


    return animalType;


}




#pragma once


#include "animal.h"




class Cat :


    public Animal




...{


public:


    Cat(void);


    ~Cat(void);


    Cat(char* ctype,int w,char* cfood);


    void ShowMe();


//    void operator <<(Cat & cat);


    char* getType();


    int getWeight();


    char* getFood();




protected:


    char type[20];


    int weight;


    char food[20];


};




#include "StdAfx.h"


#include ".at.h"


using namespace std;




Cat::Cat(void)




...{


    memcpy(type,0,sizeof(type));


    weight = 0;


    memcpy(food,0,sizeof(food));


}




Cat::~Cat(void)




...{


}


Cat::Cat(char* ctype,int w,char* cfood)




...{


//    Animal(atype);


    strcpy(type,ctype);


    strcpy(food,cfood);


    weight = w;


    Cat::animalType=1;


}


void Cat::ShowMe()




...{


    cout<<"The Cat' properties"<<endl;


    cout<<"Type: "<<getType()<<endl;


    cout<<"Weight: "<<getWeight()<<endl;


    cout<<"Food: "<<getFood()<<endl;


}


char* Cat::getType()




...{


    return type;


}


int Cat::getWeight()




...{


    return weight;


}


char* Cat::getFood()




...{


    return food;


}




#pragma once


#include "animal.h"


#include "iostream"






//istream & operator>>(istream& is,Dog& dog)


//{


//    cout<<"is"<<endl;


//    is>>dog.type;


//    is>>dog.food;


//    is>>dog.weight;


//    return is;


//}




class Dog :


    public Animal




...{


public:


    //操作


    Dog(void);


    ~Dog(void);


    Dog(char* ctype,int w,char* cfood);


    void ShowMe();


//    friend istream& operator>>(istream& is,Dog& dog);


    char* getType();


    int getWeight();


    char* getFood();


    //属性


protected:


    char type[20];


    int weight;


    char food[20];


};




#include "StdAfx.h"


#include ".dog.h"


using namespace std;




Dog::Dog(void)




...{


    memcpy(type,0,sizeof(type));


    weight = 0;


    memcpy(food,0,sizeof(food));


}




Dog::~Dog(void)




...{


}


Dog::Dog(char* ctype,int w,char* cfood)




...{


//    Animal(i);


    strcpy(type,ctype);


    strcpy(food,cfood);


    weight = w;


    Dog::animalType=2;




}


void Dog::ShowMe()




...{


    cout<<"The Dog' properties"<<endl;


    cout<<"Type: "<<getType()<<endl;


    cout<<"Weight: "<<getWeight()<<endl;


    cout<<"Food: "<<getFood()<<endl;


}


char* Dog::getType()




...{


    return type;


}


int Dog::getWeight()




...{


    return weight;


}


char* Dog::getFood()




...{


    return food;


}






#pragma once


#define MAX 12


#include "Animal.h"




class shelves




...{


public:


    shelves(void);


    ~shelves(void);


    void addElement(Animal* animal);


    void deleteElement(int index);


    void searchType();


    int getTotal();


    void getTypeTotal();






protected:


    Animal* element[MAX];


    int total;


//    int typeTotal;


};






#include "StdAfx.h"


#include ".shelves.h"


using namespace std;




shelves::shelves(void)




...{


    for(int i=0;i<MAX;i++)




    ...{


        element[i]=NULL;


    }


    total=0;


//    typeTotal=0;


}




shelves::~shelves(void)




...{




    for(int i=0;i<MAX;i++)




    ...{


//        delete element[i];


        element[i]=NULL;


    }




}


void shelves::addElement(Animal* animal)




...{


    if(total<MAX)




    ...{


        element[total] = animal;


        total++;


    }


}


void shelves::deleteElement(int index)




    ...{


        if(index >= 0 && index < MAX)




        ...{


            element[index] = NULL;


            total--;


        }


    }


void shelves::searchType()




    ...{


        for(int i=0;i<MAX;i++)




        ...{


            element[i]->ShowMe();


        }


    }


int shelves::getTotal()




    ...{


        return total;


    }


void shelves::getTypeTotal()




    ...{


        int catTotal=0;


        int dogTotal=0;


        int snakeTotal=0;


        for(int i=0;i<MAX;i++)




        ...{


            if(element[i]->getAnimalType() == 1)




            ...{


                catTotal ++;


            }


            else if(element[i]->getAnimalType() == 2)




            ...{


                dogTotal ++;


            }


            else 




            ...{


                snakeTotal ++;


            }


        }


//        return typeTotal;


        cout<<"Cat total: "<<catTotal<<endl;


        cout<<"Dog Total: "<<dogTotal<<endl;


        cout<<"Snake Total: "<<snakeTotal<<endl;


    }




#pragma once


#include "animal.h"




class Snake :


    public Animal




...{


public:


    Snake(void);


    ~Snake(void);


    Snake(char* ctype,int w,char* cfood);


    void ShowMe();


    char* getType();


    int getWeight();


    char* getFood();


protected:


    char type[20];


    int weight;


    char food[20];


};




#include "StdAfx.h"


#include ".snake.h"


using namespace std;




Snake::Snake(void)




...{


    memcpy(type,0,sizeof(type));


    weight = 0;


    memcpy(food,0,sizeof(food));


}




Snake::~Snake(void)




...{


}


Snake::Snake(char* ctype,int w,char* cfood)




...{


//    Animal(i);


    strcpy(type,ctype);


    strcpy(food,cfood);


    weight = w;


    Snake::animalType=3;


}


void Snake::ShowMe()




...{


    cout<<"The Snake' properties"<<endl;


    cout<<"Type: "<<getType()<<endl;


    cout<<"Weight: "<<getWeight()<<endl;


    cout<<"Food: "<<getFood()<<endl;


}


char* Snake::getType()




...{


    return type;


}


int Snake::getWeight()




...{


    return weight;


}


char* Snake::getFood()




...{


    return food;


}




// test0825.cpp : Defines the entry point for the console application.


//




#include "stdafx.h"




#include "iostream"


#include "Animal.h"


#include "at.h"


#include "Dog.h"


#include "Snake.h"


#include "shelves.h"




using namespace std;








int _tmain(int argc, _TCHAR* argv[])




...{


    shelves shel;


     Cat* cat;


      Dog* dog;


      //Dog* dog1=new Dog();


      //cin>>dog1;


      Snake* snake;


    char* name= new char[20];


    char* food=new char[20];


    int weight = 0;


    cout<<"请输入3个动物的类型,动物喜欢的食物,动物的重量"<<endl;


    for(int i = 0;i<3;i++)




    ...{


       cin>>name>>food>>weight;


       if(i==0)




       ...{


           cat=new Cat(name,weight,food);


           shel.addElement(cat);


       }


       if(i==1)




       ...{


           dog=new Dog(name,weight,food);


           shel.addElement(dog);


       }


       if(i==2)




       ...{


           snake= new Snake(name,weight,food);


           shel.addElement(snake);


       }


    }


    cat->ShowMe();


    dog->ShowMe();


    snake->ShowMe();


    cout<<"显示笼子的动物数量: "<<shel.getTotal()<<endl;


    cout<<"显示笼子的动物类型: ";


    shel.searchType();


    cout<<endl;


    cout<<"显示笼子的动物类型数量: ";


    shel.getTypeTotal();


    cout<<endl;




//void addElement(Animal* animal);


//    void deleteElement(int index);


//    void searchType();


//    int getTotal();


//    void getTypeTotal();


//    




//    cat.ShowMe();


    cin>>weight;


    delete name;


    delete food;


    delete cat;


    delete dog;


    delete snake;


    name = NULL;


    food = NULL;


    


    return 0;


}

















 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息