精华内容
下载资源
问答
  • c++ 谭浩强例题 和对象源码 在一个工程中 vc++ 6.0
  • C++设计例题

    2019-06-24 21:35:00
    1. 采用面向对象的方式编写一个通迅录管理程序,通迅录中的信息包括:...(提示:可以设计二个,一个通迅录条目CommEntry,一个通讯录Commus) class CommEntry { public: CommEntry(); ~CommEntr...

    1. 采用面向对象的方式编写一个通迅录管理程序,通迅录中的信息包括:姓名,公司,联系电话,邮编。要求的操作有:添加一个联系人,列表显示所有联系人。先给出类定义,然后给出类实现。(提示:可以设计二个类,一个通迅录条目类CommEntry,一个通讯录类Commus

    class CommEntry
    {
    public:
        CommEntry();
        ~CommEntry();
        virtual void input();
        virtual void output();
        void setName(string nm);
        void setTel(string t);
        string getName();
        string getTel();
        void setTelCount(int c);
    private:
        string name;
        int telCount;
        string tel;
        string telType;
    };
    
    class FreindEntry: public CommEntry
    {
    public:
        void input();
        void output();
        void setEmail(string nm);
        string getEmail();
    private:
        string Email;
    };
    
    class Comms
    {
    public:
        Comms(int max=100);
        ~Comms();
        void inputAll();
        void outputAll();
        void find(string nm);
        void modify_tel(string nm);
    private:
        CommEntry **pCe;
        int maxCount;
        int count;
    };

     

    Comms::Comms(int maxCount)
    {
        pCe = new CommEntry * [maxCount];
    }
    Comms::~Comms()
    {
        int i;
        for(i=0; i<=count; i++)
        {
            delete pCe[i];
        }
        delete []pCe;
    }

     

     

     if (iC==1)
            {
                pCe[i]= new CommEntry;
            }
            else if(iC==2)
            {
                pCe[i]= new FreindEntry;
            }
            pCe[i]->input();

     


    /*Employee 和Manager,Manager 是一种特殊的Employee。
    Employee 对象所具有的基本信息为:姓名、年令、工作年限、部门号,
    对象除具有上述基本信息外,还有级别(level)信息。公司中的两类职

    输出Employee/Manager 对象的个人信息
    retire() // 判断是否到了退休年令,是,屏幕给出退休提示。公司规定:
    类对象的退休年令为55 岁,Manager 类对象的退休年令为60 岁


    定义并实现类Employee 和Manager;
    (注意:Manager继承自Employee)
    定义一个测试程序,测试所定义的类Employee 和Manager*/

    #include<iostream>
    #include<string>
    using namespace std;
    class Employee
    {
    public:
        Employee();
        Employee(string the_name,int the_age,int the_wokeage,string the_depNo);
        void printOn();
        void retire();
    protected:
        string name;
        int age;
        int wokeage;
        int number;
        string depNo;//部门号
    };
    
    class Manager:public Employee
    {
    public:
        Manager();
        Manager(string the_name,int the_age,int the_wokeage,string the_depNo,int the_level);
        void printOn();
        void retire();
        void addMember(Employee*);
    private:
        int level;
        Employee numOfEmployee[100];
    };
    Employee::Employee():name("no name yet!"),age(0),wokeage(0),depNo("no name yet!")
    {
    }//初始化列表
    
    Employee::Employee(string the_name,int the_age,int the_wokeage,string the_depNo)
    {
        name=the_name;
        age=the_age;
        wokeage=the_wokeage;
        depNo=the_depNo;
    }
    void Employee::printOn()
    {
        cout<<"name is "<<name<<endl
            <<"age is "<<age<<endl
            <<"wokeage is "<<wokeage<<endl
            <<"bumen number is "<<number<<endl;
    }
    
    
    void Employee::retire()
    {
        if(age>=55)
            cout<<"retire!\n";
        else
            cout<<"not retire!\n";
    }
    
    Manager::Manager():level(0)
    {
    }
    Manager::Manager(string the_name,int the_age,int the_wokeage,string the_depNo,int the_level)
        :Employee(the_name,the_age,the_wokeage,the_depNo),level(the_level)
    {
    
    }//初始化列表
    void Manager::printOn()
    {
        cout<<"name is "<<name<<endl
            <<"age is "<<age<<endl
            <<"wokeage is "<<wokeage<<endl
            <<"bumen number is "<<number<<endl
            <<"level is "<<level<<endl;
    }
    void Manager::retire()
    {
        if(age>=60)
            cout<<"retire!\n";
        else
            cout<<"not retire!\n";
    }
    
    void Manager::addMember(Employee* e)
    {
          numOfEmployee[0]=*e;
    }
    int main()
    {
        Employee  e("Jack", 24, 2, "Development");
        Manager   m("Tom", 30, 5, "Development", 2);
        m.addMember(&e);//m管理e
        e.printOn();
        m.printOn();
        Employee* p = &e;//基类指针指向基类对象
        p->retire();    // 如果雇员的年龄是55,则b为true
        p = &m;//基类指针指向派生类对象
        p->retire ();      // 如果管理者的年龄是60,则 b为true
        return 0;
    }

     

     

    3. 已知类的定义如下:

    class Base {

    protected:

      int iBody;

    public:

      virtual void printOn() = 0;

      Base(int i = 0) : iBody(i) {}

      virtual int display(int x=60) {iBody = xreturn iBody;}

    };

    class Sub1 : public Base {

      // …

    public:

      // …

      Sub1(int i, string s);

    };

    class Sub2 : public Base {

      // …

    public:

      // …

      Sub2(int i, short s);

    };

    试完成类Sub1Sub2的定义和操作的实现代码,使之能符合下面程序及在注释中描述的运行结果的要求:

    main(){

      Sub1 s1(1000, "This is an object of Sub1");

      Sub2 s2(1000, 20);

      s1.printOn();         // 此时显示出: 1000: This is an object of Sub1

      s2.printOn();         // 此时显示出: 20 and 1000

      cout<<s2.display(20); // 此时显示出: 20

    }

     

    #include<iostream>
    #include<string.h>
    #include<stdio.h>
    using namespace std;
    class Base
    {
    protected:
        int iBody;
    public:
        virtual void printOn() = 0;
        Base(int i = 0) : iBody(i) {}//构造函数,初始化列表
        virtual int display(int x=60)
        {
            iBody = x;
            return iBody;
        }
    };
    class Sub1 : public Base
    {
        string cpString;
    public:
    
        Sub1(int i, string s) : Base(i),cpString(s)
        {
    
        }
        void printOn()
        {
            cout<<iBody<<":"<<cpString<<endl;
        }
    };
    class Sub2 : public Base
    {
        short sShort;
    public:
    
        Sub2(int i, short s) : Base(i),sShort(s) {}
        void printOn()
        {
            cout<<sShort<<" and "<<iBody<<endl;
        }
        int display(int x=20)
        {
            sShort = x;
            return sShort;
        }
    };
    
    int main()
    {
        Sub1 s1(1000, "This is an object of Sub1");
        Sub2 s2(1000, 20);
        s1.printOn();         // 此时显示出: 1000: This is an object of Sub1
        s2.printOn();         // 此时显示出: 20 and 1000
        cout<<s2.display(20); // 此时显示出: 20
        return 0;
    }

     

     

     

     4. 在一个GUI程序中,有一系列相关的类,circle,triangle,square等等,其中square由二个triangle对象构成. circle,triangle,square等类的对象都有相似的行为print(string)(打印出该类对象的相应信息,如类circler的此函数输出”Circle”),draw()(画出相应的类对象的图形),我们应如何组织这些类,使得系统易于扩充和维护?请用UML语言画出类图,并给出相应类中方法的界面(头文件).

     

     

    转载于:https://www.cnblogs.com/wkfvawl/p/11079650.html

    展开全文
  • C++类模板设计例题

    2014-03-25 12:14:40
    定义一个内存地址模板CMemoryAddress,其属性为某个数据的基地址(通过模板非类型参数实例化),支持的功能包括:打印基地址(print_base_address),打印基地址前一个地址(print_prior_address),打印基地址...
  • C++例题集—简单解析-与对象)

    千次阅读 多人点赞 2018-07-08 16:50:58
    对象的创建与使用:例题5-1 定义一个点,生成对象,将点的坐标显示在屏幕上:#include&lt;iostream&gt; using namespace std; class Point{ int x,y; public: void setXY(int a,int b){ ...

    由于自己本人上课不太认真,只能靠自己学习例题总结。

    希望能给大家一些便捷,让大家开心学习C++。

    对象的创建与使用:

    例题5-1    定义一个点类,生成对象,将点的坐标显示在屏幕上:

    #include<iostream>
    using namespace std;
    class Point{
        int x,y;
    public:
        void setXY(int a,int b){
            x=a;
            y=b;
        }
        int getX(){
            return x;
        }int getY(){
            return y;
        }
    };
    int main()
    {
        Point p1,p2;
        p1.setXY(1,2);
        p2.setXY(3,4);
        cout<<"点p1的x坐标为:"<<p1.getX()<<endl;
        cout<<"点p1的y坐标为:"<<p1.getY()<<endl;
        cout<<"点p2的坐标为:("<<p2.getX()<<","<<p2.getY()<<")"<<endl;
        return 0;
    
    }
    

    例题5-2 观察类的所占的字节:

    #include<iostream>
    using namespace std;
    class A{
        int x;
    public:
        void setX(int b){
            x=b;
        }
    };
    int main(){
        A a;
        cout<<sizeof(int)<<endl<<sizeof(a)<<endl;
        return 0;
    }
    

    类成员的访问能力

    例题5-3:观察类成员访问控制能力:

    #include<iostream>
    using namespace std;
    class A{
    private:
        int i;
    public:
        char c;
    public:
        void setI(int j){
            i=j;
        }
        void display(){
            cout<<"i="<<i<<endl<<"C="<<c<<endl;
        }
    };
    class B{
    public:
        char c;
    public:
        void display(){
            cout<<"c="<<c<<endl;
        }
    };
    int main(){ 
        A a;
        B b;
        //a.i=1;                error
        a.c='e';b.c='f';       //ok
        a.setI(8);             //通过接口访问公有成员
        a.display();           //ok
        b.display();
        return 0;
    }

    通过这个例子容易看出来:其实对于类来说  :在类外面只能访问公有的成员。

    但是对于要访问私有成员:需要利用公有成员函数间接调用。

    实例1:设计一个圆Circle类,能够求出圆的面积:

    #include<iostream>
    #include<cmath>
    using namespace std;
    const double Pi=acos(-1);
    class Circle{
    private:
        double m_r;
    public:
        void setR(double r){
            m_r=r;
        }
        double getR(){
            return m_r;
        }double getArea(){
            return Pi*m_r*m_r;
        }
    };
    int main()
    {
          Circle c;
          c.setR(3);
          cout<<"Circle's r is "<<c.getR()<<endl;
          cout<<"Circle's area is "<<c.getArea()<<endl;
          return 0;
    }

    通过这个实例其实可以看出来:

    调用公有的成员函数或者变量:直接用    “.”来实现好比C语言里的结构体。


    实例2:设计一个数字时钟,可以设置时间和显示时间

    #include<iostream>
    using namespace std;
    class Clock{
    private:
        int h;
        int m;
        int sec;
    
    public:
        void setTime(int nh,int nm,int ns){
            h=nh;
            m=nm;
            sec=ns;
            if(h<0||h>23||m<0||m>59||sec<0||sec>59){
                cout<<"illegal! time"<<endl;
                exit(1);
            }
        }
        void showTime(){
            cout<<h<<":"<<m<<":"<<sec<<endl;
        }
    };
    int main(){
        Clock a;
        a.setTime(14,1,2);
        a.showTime();
        return 0;
    }
    

    类的信息隐藏

    由于为了实现利用类的接口,需要把设置        .h    和    .cpp    两个文件来分别实现。

    .h     负责实现提供类的声明和类函数的实现,

    .cpp    负责利用类对应的接口函数来实现对应功能即可.


    建立2个文件,分别存放长方形Rectangle 类的声明和实现、类的使用。

    //#ifndef RECTANGLE_H_INCLUDED
    //#define RECTANGLE_H_INCLUDED
    class Rectangle{
        int len,w;
    public:
        void setL(int len);
        void setW(int w);
        int getL();
        int getW();
        int getArea();
    };
    
    
    //#endif // RECTANGLE_H_INCLUDED
    
    #include"Rectangle.h"
    #include<iostream>
    using namespace std;
    void Rectangle::setL(int L){
        len=L;
        if(L<0){
            printf("L:illegal!\n");
            exit(1);
        }
    }
    void Rectangle::setW(int W){
        w=W;
        if(W<0){
            printf("W:illegal!\n");
            exit(1);
        }
    }
    int  Rectangle::getL(){
        return len;
    }
    int  Rectangle::getW(){
        return w;
    }
    int Rectangle::getArea(){
        return len*w;
    }
    int main(){
        Rectangle A;
        A.setL(10);
        A.setW(20);
        cout<<"L:    "<<A.getL()<<endl;
        cout<<"W:    "<<A.getW()<<endl;
        cout<<"Area: "<<A.getArea()<<endl;
    
        return 0;
    }
    

    对象的初始化与消亡:

    构造函数

    由于类的复杂性,有必要专门设计一个函数来进行对象的初始化工作,

    引例:初始化时刻需要做点是什么.如定义了一个新的对象时,需要设计一些提示词:

    如“创建完成,目前是第N个对象”.

    一个简单的例子:

    #include<iostream>
    using namespace std;
    class A{
        int i;
    public:
        A(){
            i=0;
            cout<<"无参析构函数被调用"<<"i="<<i<<endl;
        }
        A(int k){
            i=k;
            cout<<"带参析构函数被调用"<<"i="<<i<<endl;
        }
    };
    int main(){
        A a1;
        A a2(2);
        return 0;
    }

    析构函数:

    #include<iostream>
    using namespace std;
    class A{
        int i;
    public:
        A(int k=0){
            i=k;
            cout<<"带参构造函数调用"<<"i="<<i<<endl;
        }
        ~A(){
            cout<<"析构函数被调用"<<endl;
        }
    };
    void fun(){
        A a(8);
    }
    int main()
    {
        A a,a1(2);
        fun();
        return 0;
    
    }

    实例:建立一个类Person(人),在屏幕上显示出基本信息:

    #include<iostream>
    #include<string.h>
    using namespace std;
    class Person{
        char *namePtr;
        bool sex;
        int age;
    public:
        Person(char *name,bool sex,int age);
        ~Person();
        void display();
    };
    Person::Person(char *p,bool s,int a){
        namePtr = new char [strlen(p)+1];
        strcpy(namePtr,p);
        sex=s;
        age=a;
    }
    Person::~Person(){
        delete []namePtr;
    }
    void Person::display(){
        if(sex){
            cout<<namePtr<<",男,"<<age<<"岁\n";
        }
        else{
            cout<<namePtr<<",女,"<<age<<"岁\n";
        }
    }
    int main(){
        char *p1={"wang fang"},*p2={"li si"};
        Person ps1(p1,false ,18),ps2(p2,true,22);
        ps1.display();
        ps2.display();
        return 0;
    }

    对象的赋值与复制

    例子、对象的赋值:

    #include<iostream>
    using namespace std;
    class A{
        int i;
        char c;
    public:
        A(int j=0,char d='*'){
            i=j;c=d;
        }
        void display(){
            cout<<"i="<<i<<'\t'<<"c="<<c<<endl;
        }
    };
    int main(){
        A a1,a2(1,'#');
        a1.display();
        a2.display();
        a1=a2;
        a2=A(2,'@');
        cout<<"赋值后:\n";
        a1.display();
        a2.display();
        return 0;
    }

    对象的复制

    复制构造函数

    #include<iostream>
    using namespace std;
    class A{
        int i;
        char c;
    public:
        A(int j=0,char d='*'){
            i=j;c=d;
        }
        void display(){
            cout<<"i="<<i<<'\t'<<"c="<<c<<endl;
        }
    };
    int main(){
        A a1,a2(1,'#');
        a1.display();
        a2.display();
        a1=a2;
        a2=A(2,'@');
        cout<<"赋值后:\n";
        a1.display();
        a2.display();
        return 0;
    }

    例题5-9:浅复制示例。

    某工厂生产了一批产品,所有产品质量属性默认为Good,若检测到某件产品质量有问题,应将质量属性改为Poor。

    #include<iostream>
    #include<string>
    #include<string.h>
    using namespace std;
    class Product{
        char * ptr;
    public:
        Product (char * q){
            ptr=new char [strlen(q)+1];
            strcpy(ptr,q);
            cout<<"调用构造函数!!!"<<endl;
        }
        void change( char *newq){
            strcpy(ptr,newq);
        }
        void display(){
            cout<<ptr<<endl;
        }
    };
    int main(){
        Product b1("Good"),b2(b1);
        cout<<"产品检测前:"<<endl;
        cout<<"b1的质量"<<endl;
        b1.display();
        cout<<"b2的质量"<<endl;
        b2.display();
        cout<<"产品检测后:"<<endl;
        b2.change("Poor");
        cout<<"b1的质量"<<endl;
        b1.display();
        cout<<"b2的质量"<<endl;
        b2.display();
        return 0;
    }

    其实大家也可以看到:要是浅复制其实就是利用指针指向同一份数据,要是销毁一份数据,那么其他数据进行销毁

    直接跳出系统。

    例题5-10 深复制

    深复制的要领:

    开辟一个指针区域,把每一块对应开辟New,对应复制内容即可。

    #include<iostream>
    #include<string.h>
    using namespace std;
    class Product{
        char *ptr;
    public:
        Product (char *q){
            ptr=new char [strlen(q)+10];
            strcpy(ptr,q);
        }
        Product(const Product &q){
            ptr=new char [strlen(q.ptr)+10];
            strcpy(ptr,q.ptr);
        }
        ~Product(){
            delete []ptr;
        }
        void change(char *q){
            strcpy(ptr,q);
        }
        void display(){
            cout<<ptr<<endl;
        }
    };
    int main(){
        Product b1("Good"),b2(b1);
        cout<<"产品检测前:\n";
        cout<<"b1的质量:";
        b1.display();
        cout<<"b2的质量:";
        b2.display();
        b2.change("Poor");
        cout<<"产品检测后:\n";
        cout<<"b1的质量:";
        b1.display();
        cout<<"b2的质量:";
        b2.display();
        return 0;
    }

    复制函数被调用的三种情况

    (1)、当用一个对象去初始化该类的另一个对象是。

    (2)、当调用的函数形参是类的对象,在实参传值给形参是。

    (3)、当调用的函数返回值是类的对象,在执行return语句向调用折传送对象时。

    例题如下:

    #include<iostream>
    using namespace std;
    class A{
        int i;
    public:
        A(int k=0){
            i=k;
            cout<<"调用了构造函数!!!!!!11"<<endl;
        }
        A(const A& q){
           i=q.i;
           cout<<"调用了复制构造函数!!!!~~~~"<<endl;
        }
        ~A(){
            cout<<"调用了析构函数"<<endl;
        }
    };
    void fun1(A x){}
    A fun2(){
        A y;
        return y;
    }
    int main(){
        A a1(2);
        fun1(a1);
        A a2=fun2();
        return 0;
    }

    实例:圆类Circle,设计一个比较两个圆的大小.

    #include<iostream>
    using namespace std;
    class Circle{
        double R;
    public:
        Circle(double r=1.0){
            R=r;
        }
        double getR(){
            return R;
        }
        bool isLargerThan(Circle q){
            return (R-q.R)>0;
        }
    };
    int main()
    {
        Circle c1(2.0),c2(8.0);
        if(c2.isLargerThan(c1)){
            cout<<"c1<c2"<<endl;
        }else{
            cout<<"c1>c2"<<endl;
        }
        return 0;
    }

    对象数组

    定义:

    #include<iostream>
    using namespace std;
    class A{
        int i;
    public:
        A(int k=0){
            i=k;
        }
        void show(){
            cout<<"i="<<i<<endl;
        }
    };
    int main()
    {
        A a[3];
        A arr[3]={ A(1) };
        A array[3]={A(1),A(2),A(3)};
        for(int i=0;i<3;i+=1){
            arr[i].show();
        }cout<<endl;
        for(int i=0;i<3;i+=1){
            array[i].show();
        }
        return 0;
    }

    例题:设计一个员工类(Employee),可以对所有员工加薪,并找出最高薪金员工。

    #include<iostream>
    #include<cstring>
    using namespace std;
    class Employee{
        char ID[10];
        char  *ptr;
        double s;
    public:
        Employee();
        Employee(char id[],char *q,double ss);
        char *getName();
        double getS();
        void growS(double add);
        void display();
        ~Employee();
    };
    Employee::Employee(){
        ptr=NULL;
    }
    Employee::Employee(char id[],char *q,double ss){
        strcpy(ID,id);
        ptr=new char [strlen(q)+1];
        strcpy(ptr,q);
        s=ss;
    }
    Employee::~Employee(){
        delete []ptr;
    }
    char *Employee::getName(){
        return ptr;
    }
    double Employee::getS(){
        return s;
    }
    void Employee::growS(double d){
        s+=d;
    }
    void Employee::display(){
        cout<<ID<<":"<<ptr<<",salary: "<<s<<endl;
    }
    int main(){
        Employee employee[3]={Employee("101","LK",2340),Employee("102","ZQ",3440),Employee("103","GF",4540)};
        int i,maxz=0,cnt;
        double temp;
        cout<<"加薪前:"<<endl;
        for(int i=0;i<3;i++){
            employee[i].display();
        }
        cout<<"加薪后:"<<endl;
        for(int i=0;i<3;i++){
            employee[i].growS(600);
            employee[i].display();
            temp=employee[i].getS();
            if(temp>maxz){
                cnt=i;
                maxz=temp;
            }
        }
        cout<<"最高工资的人员是:"<<employee[cnt].getName()<<",工资额:"<<employee[cnt].getS()<<endl;
        return 0;
    }

    指向对象的指针与对象的引用

    定义:

    #include<iostream>
    using namespace std;
    class A{
        int i;
    public:
        A(int k=0){
            i=k;
        }
        void display(){
            cout<<"i="<<i<<endl;
        }
    };
    int main(){
        A a1,a2(5);
        A *p=&a1;
        p->display();
        p=&a2;
        p->display();
        return 0;
    }

    例题:对于在函数赋值

    (1)、形参为对象。

    (2)、形参为对象的引用。

    (3)、形参为对象指针。

    其中第一种是行不通的。

    #include<iostream>
    using namespace std;
    class A{
        int i;
    public:
        A(){
            i=0;
            cout<<"调用了构造函数!!!\n";
        }
        A(const A & q){
            i=q.i;
            cout<<"调用了复制构造函数"<<endl;
        }
        void seti(int j){
            i=j;
        }
        int get(){
            return i;
        }
        void display(){
            cout<<"i="<<i<<endl;
        }
    };
    void fun1(A a, int x){
        a.seti(x);
    }
    void fun2(A& r,int x){
        r.seti(x);
    }
    void fun3(A *p,int x){
        p->seti(x);
    }
    int main(){
        A a;
        cout<<"函数调用前:\n";
        a.display();
        cout<<"对象作为函数参数\n";
        fun1(a,2);
        a.display();
        cout<<"对象引用作为函数参数\n";
        fun2(a,2);
        a.display();
        cout<<"指针作为参数函数"<<endl;
        fun3(&a,4);
        a.display();
        return 0;
    }

    this指针

    例题5-14:设计长方形类,显式使用this指针
    #include<iostream>
    using namespace std;
    class R{
        int len,w;
    public:
        R(int len,int w);
        int getArea();
    };
    R::R(int len,int w){
        this->len=len;
        this->w=w;
    }
    int R::getArea(){
        return (this->len)*(this->w);
    }
    int main(){
        R r1(2,5),r2(3,6);
        cout<<"First Area is "<<r1.getArea()<<endl;
        cout<<"Second Area is "<<r2.getArea()<<endl;
        return 0;
    }


    对象的动态创建与销毁:

    主要运用了两个形式:

    New:

    new     ClassName(如:int);

    有两种形式:

    1、new     A(8)

    2、new     A[3];

    Delete:

    1、delete     A;

    2、delete     []A;

    例题:

    #include<iostream>
    using namespace std;
    class A{
        int i;
    public:
        A(int k=0){
            i=k;
        }
        void display(){
            cout<<"i="<<i<<endl;
        }
    };
    int main()
    {
        A *p=new A;
        p->display();
        delete p;
        p=new A(8);
        p->display();
        delete p;
        p=new A[3];
        A *q=p;
        for(int i=0;i<3;i++){
            q++->display();
        }
        delete []p;
        return 0;
    }

    例题5-15     设计点类,由用户决定点的数目及位置,将点展示在屏幕。

    #include<iostream>
    using namespace std;
    class Point{
        int x,y;
    public:
        Point(int a=0,int b=0){
            x=a,y=b;
        }
        void setXY(int u,int v){
            x=u,y=v;
        }
        void display(){
            cout<<"("<<x<<','<<y<<")\t";
        }
    };
    int main(){
        Point *p , *q;
        int num,i,x,y;
        cout<<"Enter the number of points:";
        cin>>num;
        q=p=new Point[num];
        for(int i=0;i<num;i++){
            cout<<"Enter x:";
            cin>>x;
            cout<<"Enter y:";
            cin>>y;
            q->setXY(x,y);
            q++;
        }
        q=p;
        cout<<"共有"<<num<<"个点,其坐标是:\n";
        for(i=0;i<num;i++){
            q->display();
            q++;
        }
        cout<<endl;
        delete p;
        return 0;
    }

    对象的引用:

    例题(改名字):

    #include<iostream>
    using namespace std;
    class Point {
        int x,y;
    public:
        Point(int a=0,int b=0){
            x=a,y=b;
        }
        void display(){
            cout<<"("<<x<<','<<y<<")\n";
        }
    };
    int main(){
        Point p1(1,2);
        Point &r=p1;
        r.display();
        return 0;
    }
    

    类的组合

    组合的定义:

    #include<iostream>
    using namespace std;
    class A;
    class B;
    class A{
        int i;
    public:
        A(int k=0){
            i=k;
            cout<<"调用了构造函数.\n";
        }
    };
    class B{
        A a;
        int j;
    };
    int main(){
        B b;
        return 0;
    }

    组合类的构造函数

    例题:

    #include<iostream>
    using namespace std;
    class Point{
        double x,y;
    public:
        Point(double a=0,double b=0){
            x=a;
            y=b;
            cout<<"调用了Point类的构造函数"<<endl;
        }
        Point(const Point &A){
            cout<<"调用了Point类的复制构造函数"<<endl;
            x=A.x;
            y=A.y;
        }
        void show(){
             cout<<"("<<x<<","<<y<<")"<<endl;
        }
    };
    class Circle {
        Point c;
        double R;
    public:
        Circle(const Point &pt,double r):c(pt)
        {
            cout<<"调用了Circle类的构造函数"<<endl;
            R=r;
        }
        void display(){
            c.show();
        }
    };
    int main()
    {
        Point P(1,2);
        Circle C(P,3);
        C.display();
        return 0;
    }

    组合类的顺序:

    成员对象的初始化顺序是按照对象成员在组合类中的声明的先后顺序进行,

    与成员初始化表中成员对象出现的顺序无关。

    例题:

    #include<iostream>
    using namespace std;
    class A{
        int i;
    public:
        A(int s=0){
            i=s;
            cout<<"A类的构造函数"<<endl;
        }
        A(A & ta){
            i=ta.i;
            cout<<"A类的复制构造函数"<<endl;
        }
        ~A(){
            cout<<"A类的析构函数"<<endl;
        }
    };
    class B{
        int j;
    public:
        B(int t=0){
            j=t;
            cout<<"B类的构造函数"<<endl;
        }
        B(B &tb){
            j=tb.j;
            cout<<"B类的复制函数"<<endl;
        }
        ~B(){
            cout<<"B类的析构函数"<<endl;
        }
    };
    class C{
    
    
        B b;
        A a;
        int k;
    public:
        C(int u,int v,int w):a(u),b(v),k(w){
            cout<<"C类的构造函数"<<endl;
        }
        C(A &ta,B& tb,int w):a(ta),b(tb),k(w){
            cout<<"C类复制函数"<<endl;
        }
        ~C(){
            cout<<"C类的析构函数"<<endl;
        }
    };
    int main(){
        {
            C c1(2,5,6);
        }
        cout<<"首先生成成员函数,再创建复合对象\n";
        A ta;
        B tb(5);
        C c2(ta,tb,2);
        return 0;
    
    
    }

    string类:

    s.length()和‘+’:

    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
        string str1="we";
        string str2=("programming");
        cout<<"programming的长度是"<<str2.length()<<endl;
        string str3;
        str3=str1+" are "+str2;
        cout<<str3<<endl;
        return 0;
    }

    类的静态成员

    例题,静态成员:

    #include<iostream>
    using namespace std;
    class Point{
        double x,y;
        static int cnt;
    public:
        Point(double a=0,double b=0):x(a),y(b){
            cnt++;
        }
        ~Point(){
            cnt--;
        }
        void show(){
            cout<<"the number of Point is "<<cnt<<endl;
        }
    };
    int Point::cnt=0;
    int main(){
        Point p1;
        Point *p=new Point(1,2);
        p->show();
        delete p;
        p1.show();
        return 0;
    }

    静态函数成员:

    #include<iostream>
    #include<string>
    #include<string.h>
    using namespace std;
    class Salesman{
        char name[10];
        int salecnt;
        double price;
        double per;
        double com;
        static int cnt;
        static double tot;
    public:
        Salesman(char nm[],int Cnt,double Price,double Per){
            strcpy(name,nm);
            cnt=Cnt;
            price=Price;
            per=Per;
            com=price*cnt*per;
            tot+=com;
            cnt++;
        }static double getAver(){
            return tot/cnt;
        }static void show(){
            cout<<"共有"<<cnt<<"名销售员,提成总额是"<<tot<<endl;
        }
    };
    int Salesman::cnt=0;
    double Salesman::tot=0.0;
    int main(){
        Salesman sman[]={
        Salesman("Li",4,100,0.5),
        Salesman("Wang",3,200,0.4),
        Salesman("Liu",2,300,0.3)
        };
        Salesman::show();
        cout<<"平均每人提成:"<<Salesman::getAver()<<endl;
        return 0;
    }

    类的友元

    友元函数:

    例题5-19 用友元函数计算两点间的距离:

    #include<iostream>
    #include<cmath>
    #include<string>
    using namespace std;
    class Point{
        double x,y;
    public:
        Point(double a=0,double b=0){
            x=a,y=b;
        }
        friend double dist(const Point &p1,const Point &p2);
    };
    double dist(const Point &p1,const Point &p2){
        double d1,d2,dist;
        d1=p1.x-p2.x;
        d2=p1.y-p2.y;
        dist=sqrt(d1*d1+d2*d2);
        return dist;
    }
    int main(){
        Point p1(1.0,2.0),p2(2.0,3.0);
        cout<<"两点之间的距离是:"<<dist(p1,p2)<<endl;
        return 0;
    }

    常对象:

    例题:

    #include<iostream>
    using namespace std;
    class Time{
        int h,mi,sec;
    public:
        Time(int hr,int mnt,int scd){
            h=hr;
            mi=mnt;
            sec=scd;
        }
        void setTime(int nh,int nm,int ns);
        void show()const ;
    };
    void Time::setTime(int hr,int mn,int se){
        h=hr;
        mi=mn;
        sec=se;
    }
    void Time::show()const {
        cout<<h<<":"<<mi<<":"<<sec;
    }
    int main(){
        Time t(12,11,15);
        //t.setTime(12,10,15);
        t.show();
        return 0;
    }

    常函数:

    #include<iostream>
    using namespace std;
    class A{
    int ta;
    public:
        A(int tmp=12):ta(tmp){};
        void hello ()const{
            printf("hello");
        }
        void xA()const{
            cout<<ta<<endl;
            //changA();
            hello();
        }
        void changA(){
            ta=10;
            xA();
        }
    };
    int main(){
        A ta(2);
        ta.changA();
        return 0;
    }
    











    展开全文
  • C++继承例题

    千次阅读 2010-08-14 12:12:00
    把定义平面直角坐标系上的一个点的cpoint作为基类,派生出描述一条直线的cline, 再派生出一个矩形crect。要求成员函数能求出两点间距,矩形周长和面积。 #include<iostream><br /> #include...
    把定义平面直角坐标系上的一个点的类cpoint作为基类,派生出描述一条直线的类cline,
    再派生出一个矩形类crect。要求成员函数能求出两点间距,矩形周长和面积。
    #include<iostream>
    #include<cmath>
    using namespace std;
    class cpoint
    {
    public:
    int x,y;
    public:
    cpoint(int x=0,int y=0)
    {
    this->x=x;
    this->y=y;
    }
    };
    class cline:public cpoint
    {
    private:
    cpoint p1,p2;
    public:
    cline(int a=0,int b=0,int c=0,int d=0)
    :p1(a,b),p2(c,d)
    {}
    double length()//求两点间距
    {
    return sqrt((p2.y-p1.y)*(p2.y-p1.y)+(p2.x-p1.x)*(p2.x-p1.x));
    }
    };
    class crect:public cline
    {
    private:
    cline l1,l2;
    public:
    crect(int a=0,int b=0,int c=0,int d=0,int e=0,int f=0)
    :
    l1(a,b,c,d),l2(c,d,e,f)
    {}
    void girth()
    {
    cout<<"周长:"<<2*(l1.length()+l2.length()) <<endl;
    }
    void area()
    {
    cout<<"面积:"<<l1.length()*l2.length()<<endl;
    }
    };
    int main()
    {
    crect c(0,0,2,0,2,1);
    c.girth();
    c.area();
    return 0;
    }
    务必注意:基类的构造函数要有默认参数,这样派生类才能调用基类的构造函数
    例如:
    cpoint(int x=0,int y=0)
    {
    this->x=x;
    this->y=y;
    }
    如果改为
    cpoint(int x,int y)
    {
    this->x=x;
    this->y=y;
    }
    则会报错!
    展开全文
  • c++ 经典例题详解

    2009-05-19 20:36:43
    题 5 下面是一个的测试程序,设计出能使用如下测试程序的。编写一个程序,已有若干学生数据,包括学号、姓名、成绩,要求输出这些学生数据并计算平均分
  • C++例题

    2021-03-18 19:55:24
    要求实现一个代表学生的,并且所有成员变量都应该是私有的。义目录标题) 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇...

    输入:姓名、年龄、学号(整数),第一学年平均成绩,第二学年平均成绩,

    第三学年平均成绩,第四学年平均成绩。

    输出:姓名、年龄、学号、四年的平均成绩。

    例如:

    输入:Tom 18 7817 80 80 90 70

    输出:Tom 18 7817 80

    要求实现一个代表学生的类,并且所有成员变量都应该是私有的。义目录标题)

    最简单的版本:

    #include <iostream>
    using namespace std;
    
    class student
    {
    	char *name;
    	int age;
    	int number;
    	int avg_1, avg_2, avg_3, avg_4;
    
    public:
    	void insert(char *Name, int Age, int Number, int Avg_1, int Avg_2, int Avg_3, int Avg_4);
    
    	int calculate();
    };
    
    void student::insert(char *Name, int Age, int Number, int Avg_1, int Avg_2, int Avg_3, int Avg_4)
    {
    	name = Name;
    	age = Age;
    	number = Number;
    	avg_1 = Avg_1;
    	avg_2 = Avg_2;
    	avg_3 = Avg_3;
    	avg_4 = Avg_4;
    }
    int student::calculate()
    {
    	return (avg_1 + avg_2 + avg_3 + avg_4) / 4;
    }
    
    int main()
    {
    
    	student s;
    	char Name[20];
    	int Age, Number, Avg_1, Avg_2, Avg_3, Avg_4;
    
    	cin >> Name;
    	cin >> Age;
    	cin >> Number;
    	cin >> Avg_1;
    	cin >> Avg_2;
    	cin >> Avg_3;
    	cin >> Avg_4;
    	s.insert(Name, Age, Number, Avg_1, Avg_2, Avg_3,Avg_4);
    	cout << Name << ',' << Age << ',' << Number << ',' << s.calculate();
    }
    
    
    展开全文
  • C++课本例题(派生的构造函数)

    千次阅读 2012-05-26 19:06:30
    class Student1:public Student//声明公用派生Student1 { public://派生的公用部分 Student1(int n,string nam,char s,int a,string ad):Student (n,nam,s) //派生构造函数 { age = a;//在函数体中...
  • c++类与对象部分初级基础题讲解,知识点梳理,
  • 根据圆的原新位置和半径算面积,根据正方形中心定点坐标算面积
  • C++:的继承例题

    2021-01-22 19:10:33
    的继承 #include "stdafx.h" #include <iostream> using namespace std; class Animal { //int age;如果不加pulic:那么系统会自动默认为private public: int age; }; class Dog : Animal { public: ...
  • C++语言编写一个抽象Shape,派生出两个子类Rectangle和Circle,完成计算矩形面积和圆面积; #include<iostream> using namespace std; class Shape{ //建立抽象Shape public: virtual...
  • 背包问题实例
  • C++继承例题小结

    千次阅读 2010-08-17 11:53:00
    班级cclass的数据成员有cstudent对象成员数组(大小由构造函数确定),班号,班级人数。要求: 1.cclass的对象成员数组需要在构造函数中用new动态分配内存空间,在析构函数中释放。在
  • C++例题集—简单解析-继承)

    千次阅读 2018-07-08 20:29:52
    继承与派生的概念派生的声明:#include&lt;iostream&gt; using namespace std; class Base{ int b; public: void display(){ cout&lt;&lt;b&lt;&lt;endl; } }; class Derived:public ...
  • PAGE / NUMPAGES 第3章例题 例3-1 //employee2.h #include <iostream> #include <string> using namespace std; class Employee //定义Employee { public: Employee; //构造函数的声明 void Setname(string; //...
  • C++编程200例题

    2008-11-28 09:32:05
    1. 盘中所有实例的源程序文件按篇分类,均包含在相应目录下,... 读者可按附录B的介绍,使用Visual C++ 6.0系统调试C++程序。 6. 可将本附随盘的例子拷贝到硬盘的特定目录中,然后用Visual C++ 6.0系统创建工程调试。
  • C++例题4--的大小判定--sizeof

    千次阅读 2017-06-16 16:39:30
    因此,在为这个创建一个实例对象的时候,是无需再为static成员变量分配空间的,所以,这个的实例对象所需要分配的空间是要排除static成员变量的,于是,当sizeof计算的大小的时候会忽略static成员变量的大小。...
  • C++程序开发例题与习题

    热门讨论 2010-02-25 13:02:12
    本书是一本通过编程实践引导学生掌握C++程序开发能力的教材。... 本书既有编程知识介绍,也有精选的例题,还有大量自测题及其参考答案。可以作为教授C++程序设计课程的习题课教材,也可供读者自学。
  • 很适合用编程题,这些题目重点是调用来实现程序的更简化,还有结构函数等等
  • C++封装初步认识 例题

    2020-09-25 17:24:56
    ## **例题** #include<iostream> using namespace std; //设计一个圆,求圆的周长 //圆求周长 const double PI = 3.14; class Circle { //访问权限 public: //属性 int m_r; //行为 //获取圆的...
  • 已知时间TimeType和日期DateType,先通过多重继承定义日期时间 DateTimeType1,然后使用聚合方式定义功能完全一样的日期时间DateTimeType2。本人比较小白,用聚合方式定义功能不太理解,看了很多,还是不会...
  • C++C++资料,考试例题与答案,职工信息表和职工信息简表,编写Printer(),Find()等成员
  • C++:单例模式例题解析

    千次阅读 2016-04-15 09:19:39
    C++:单例模式例题解析标签:单例模式 队列by 小威威这篇博文主要是讲解例题,如要深入了解单例模式,可以参考这篇文章: C++设计模式——单例模式,我个人觉得写得不错。单例模式是C++设计模式中的一种,它保证一个...
  • C++ 并查集 例题讲解

    2019-09-14 22:20:27
    动物王国中有三动物A,B,C,这三动物的食物链构成了有趣的环形。A吃B, B吃C,C吃A。 现有N个动物,以1-N编号。每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种。 有人用两种说法对这N...
  • c++例题 构造函数(一)

    千次阅读 2013-03-28 14:38:14
    【项目1拓展(选做)】请自行设计一个矩形,可以计算矩形的面积、周长、对象线,判断是否是正方形。请用上类似的构造函数,自己设计main()函数,对设计的进行测试。 #include #include using namespace ...
  • 长方柱Bulk的数据成员包括长(length)、宽(width)、高(heigth)等。另外:  (1)需要定义长方柱,5个长方柱采用一个对象数组表示;  (2)定义相应的构造函数以支持如下main()函数

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 264
精华内容 105
关键字:

c++类例题

c++ 订阅