20240514 练习(狼人类,Triangle类,父类子类简单版,Person类(子类学生,雇员等)ToString函数)

 1.狼人类

C++ 实现

定义以下三个类;

狼类(Wolf):

成员变量姓名:stringName,成员变量爪子锋利度:intShape,

成员函数:voidPrintState(),按照姓名、爪子锋利度格式输出两个成员变量的值。

人类(Human):

成员变量姓名:stringName,成员变量智力:intIntell,

成员函数:void PrintState0)按照姓名、智力格式输出两个成员变量的值。

狼人类(Werewof),它继承狼类和人类,

成员函数:voidSetName(stringname),函数用来设置两个基类的成员变量姓名。

成员函数:void SetState(int shape,intintell),函数用 shape、intell两个参数分别设置狼类的爪子锋利度和人类的智力。

成员函数:void PrintAllState(),函数按照狼类,人类的顺序调用两个基类的PrintState 函数,输出他们的成员变量值。

#include <string>
#include <iostream>
using namespace std;

#include <string>
class Wolf
{
public:
    void setName(string n)
    {
            Name=n;
    }
    void setShape(int s)
    {
        Shape=s;
    }
    string getName() const
    {
        return Name;
    }
    int getShape() const
    {
        return Shape;
    }
    virtual void PrintState();

private:
    string Name;
    int Shape;
};

class Human
{
public:
    void setName(string n)
    {
        Name=n;
    }
    void setIntell(int i)
    {
        Intell=i;
    }
    string getName() const
    {
        return Name;
    }
    int getIntell() const
    {
        return Intell;
    }
    void PrintState();

private:
    string Name;
    int Intell;
};
class Werewolf:public Wolf ,public Human
{
public:
      void SetName(string name);

      void SetState(int shape,int intell);

      void PrintAllState();
private:
};
void Wolf::PrintState()
{
    cout << "姓名:" << getName() << ",爪子锋利度为:" << getShape() << endl;
}
void Human::PrintState()
{
    cout << "姓名:" << getName() << ",智力为:" << getIntell() << endl;
}
void Werewolf::SetName(string name)
{
    Wolf::setName(name);
    Human::setName(name);
}

void Werewolf::SetState(int shape,int intell)
{
    Wolf::setShape(shape);
    Human::setIntell(intell);
}
void Werewolf::PrintAllState()
{
    Wolf::PrintState();
    Human::PrintState();
}
int main()
{
    int i,j;
    string name;
    cin >> i >> j >> name;
    Werewolf ww;
    ww.SetName(name);
    ww.SetState(i,j);
    ww.PrintAllState();
}

2.

#include <iostream>
#include <iomanip>
#include <cmath>

using namespace std;

class GeometricObject
{
public:
    GeometricObject();
    GeometricObject(string color, bool filled);
    string getColor();
    void setColor(string color);
    bool isFilled();
    void setFilled(bool filled);
    string toString();

private:
    string color;
    bool filled;
};

GeometricObject::GeometricObject()
{

}
GeometricObject::GeometricObject(string color, bool filled)
{
    setColor(color);
    setFilled(filled);
}
string GeometricObject::getColor()
{
    return color;
}
void GeometricObject::setColor(string color)
{
    this->color=color;
}
bool GeometricObject::isFilled()
{
    if(filled==1) return true;
    else return false;
}
void GeometricObject::setFilled(bool filled)
{
    this->filled=filled;
}
//string GeometricObject::toString();

class Triangle:public  GeometricObject
{
public:
    Triangle():side1(1.0),side2(1.0),side3(1.0)
    {

    }
    Triangle(double s1,double s2,double s3):side1(s1),side2(s2),side3(s3)
    {

    }

    ~Triangle()
    {

    }

    void setSide1(double s1)
    {
        side1=s1;
    }
    void setSide2(double s2)
    {
        side2=s2;
    }
    void setSide3(double s3)
    {
        side3=s3;
    }

    double getSide1() const
    {
        return side1;
    }
    double getSide2() const
    {
        return side2;
    }
    double getSide3() const
    {
        return side3;
    }

    double getArea() const
    {
        double p=getPerimeter()/2;

        return sqrt(p*(p-side1)*(p-side2)*(p-side3));
    }
    double getPerimeter() const
    {
        return side1+side2+side3;
    }

private:
    double side1;
    double side2;
    double side3;
};


int main()
{
    //cout << "Enter three sides: ";
    double side1, side2, side3;
    cin >> side1 >> side2 >> side3;

    Triangle triangle(side1, side2, side3);

    //cout << "Enter the color: ";
    string color;
    cin >> color;

    //cout << "Enter 1/0 for filled (1: true, 0: false): ";
    bool filled;
    cin >> filled;

    triangle.setColor(color);
    triangle.setFilled(filled);

    cout << "Area is " << fixed<<setprecision(2)<<triangle.getArea() << endl;
    cout << "Perimeter is "<< fixed<<setprecision(2) << triangle.getPerimeter() << endl;
    cout << "Color is " << triangle.getColor() << endl;
    cout << "Filled is " <<
         (triangle.isFilled() ? "true" : "false") << endl;

    return 0;
}

3.父类子类(简单的返回其大小)

#include <iostream>
using namespace std;

class List
{
protected:
    int size;

public:

    //List();
    //~List();
    void setSize(int s)
    {
        size=s;
    }
    int getSize() const
    {
        return size;
    }
};

class ArrayList:public List
{
    public:
    //ArrayList();
};
class LinkedList:public List
{
    public:
    //LinkedList();
};
int main()
{
    List a;
    ArrayList b;
    LinkedList c;
    int s;
    cin>>s;
    a.setSize(s);
    cin>>s;
    b.setSize(s);
    cin>>s;
    c.setSize(s);
    cout<<a.getSize()<<b.getSize()<<c.getSize()<<endl;
    return 0;
}

4.

#include <iostream>
#include <string>
using namespace std;

class Person
{
public:
    void setName(string n);
    void setAddress(string a);
    void setPhoneNumber(string p);
    void setEmail(string e);

    void setPersonInfo(string n,string a,string p,string e);

    string getName();
    string getAddress();
    string getPhoneNumber();
    string getEmail();

    virtual string toString();

private:
    string name;
    string address;
    string phoneNumber;
    string email;
};
void Person::setName(string n)
{
    name=n;
}
void Person::setAddress(string a)
{
    address=a;
}
void Person::setPhoneNumber(string p)
{
    phoneNumber=p;
}
void Person::setEmail(string e)
{
    email=e;
}

void Person::setPersonInfo(string n,string a,string p,string e)
{
    name=n;
    address=a;
    phoneNumber=p;
    email=e;
}

string Person::getName()
{
    return name;
}
string Person::getAddress()
{
    return address;
}
string Person::getPhoneNumber()
{
    return phoneNumber;
}
string Person::getEmail()
{
    return email;
}

string Person::toString()
{
    return "name: " +getName() + "\n" +
           "address: " + getAddress() + "\n" +
           "phoneNumber: " + getPhoneNumber() + "\n" +
           "email: " + getEmail();
}

class Student:public Person
{
public:
    Student();
    Student(string s);

    ~Student();

    void setStatus(string s);

    string getStatus() const;

    string toString();
private:
    string status ;
};

Student::Student()
{

}
Student::Student(string s)
{
    setStatus(s);
}

Student::~Student()
{

}
void Student::setStatus(string s)
{
    status=s;
}

string Student::getStatus() const
{
    return status;
}

string Student::toString()
{
    return "Student:\n" + Person::toString() + "\nstatus:" + getStatus();
}

class Employee:public Person
{
public:
    Employee();
    Employee(int s);

    ~Employee();
    void setSalary(int s);

    int getSalary() const;

    string toString();
private:
    int salary;
};

Employee::Employee()
{

}

Employee::Employee(int s)
{
    setSalary(s);
}

Employee::~Employee()
{

}

void Employee::setSalary(int s)
{
    salary=s;
}

int Employee::getSalary() const
{
    return salary;
}

string Employee::toString()
{
    return "Employee:\n" + Person::toString() + "\nsalary: " + to_string(salary);
}
class Faculty:public Employee
{
public:
    Faculty();
    Faculty(int s,int r);

    ~Faculty();

    void setSalary(int s);
    void setRank(int r);

    int getSalary() const;
    int getRank() const;

    string toString();
private:
    int    salary;
    int    rank;

};

Faculty::Faculty()
{

}
Faculty::Faculty(int s,int r)
{
    setSalary(s);
    setRank(r);
}

Faculty::~Faculty()
{

}

void Faculty::setSalary(int s)
{
    salary=s;
}
void Faculty::setRank(int r)
{
    rank=r;
}

int Faculty::getSalary() const
{
    return salary;
}
int Faculty::getRank() const
{
    return rank;
}

string Faculty::toString()
{
    return "Faculty:\n" + Person::toString() + "\nsalary: " + to_string(getSalary()) + "\nrank: " + to_string(getRank());
}

int main()
{
    string name;
    string address;
    string phoneNumber;
    string email;
    string status;
    int    salary;
    int    rank;

    
    
    cin>>name>>address>>phoneNumber>>email;
    cin>>status;

    Person*  s =  new Student(status);
    s->setPersonInfo(name,address,phoneNumber,email);

    
    cin>>name>>address>>phoneNumber>>email;
    cin>>salary;

    Person*  e = new Employee(salary);
    e->setPersonInfo(name,address,phoneNumber,email);

    
    cin>>name>>address>>phoneNumber>>email;
    cin>>salary>>rank;

    Person*  f = new Faculty(salary, rank);
    f->setPersonInfo(name,address,phoneNumber,email);



    cout << s->toString() << endl;
    cout <<"---"<<endl;
    cout << e->toString() << endl;
    cout <<"---"<<endl;
    cout << f->toString() << endl;

    return 0;
}


  • 38
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,让我为您提供一个示例程序来演示如何在子类中定义与父类相同的函数,用不同的对象进行函数的调用。 ```c++ #include <iostream> using namespace std; // 父类 class Shape { public: virtual void draw() { cout << "This is a shape." << endl; } }; // 子类1 class Circle : public Shape { public: void draw() { cout << "This is a circle." << endl; } }; // 子类2 class Square : public Shape { public: void draw() { cout << "This is a square." << endl; } }; // 子类3 class Triangle : public Shape { public: void draw() { cout << "This is a triangle." << endl; } }; int main() { Shape *shape1 = new Circle(); Shape *shape2 = new Square(); Shape *shape3 = new Triangle(); shape1->draw(); shape2->draw(); shape3->draw(); delete shape1; delete shape2; delete shape3; return 0; } ``` 上面的程序中,我们定义了一个父类Shape和三个子类Circle、Square、Triangle。在父类Shape中,我们定义了一个虚函数draw,然后在三个子类中分别重写了这个函数,并输出不同的信息。在主函数中,我们创建了三个指向Shape型的指针,分别指向三个子类的对象,并分别调用了这些对象的draw函数,然后将指针释放掉。 当我们运行上面的程序时,会输出以下结果: ``` This is a circle. This is a square. This is a triangle. ``` 从结果可以看出,尽管三个子类中都重写了父类Shape中的虚函数draw,但是分别调用它们的draw函数时,会输出不同的信息,这是因为我们用不同的的对象进行了函数的调用。 这就是一个简单的示例,演示了如何在子类中定义与父类相同的函数,用不同的对象进行函数的调用。希望这个示例可以帮到您。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值