精华内容
下载资源
问答
  • //一个类可以多个基类中派生。在派生多个基类派生的多重继承模式中, //基类是用基类表语法成分来说明的,多重继承的语法与单一继承很类似, //只需要在声明继承的多个之间加上逗号来分隔 class B1 { public:...

    #include <iostream>
    using namespace std;
    //多重继承
    //一个类可以从多个基类中派生。在派生类由多个基类派生的多重继承模式中,
    //基类是用基类表语法成分来说明的,多重继承的语法与单一继承很类似,
    //只需要在声明继承的多个类之间加上逗号来分隔
    class B1
    {
    public:
        void output();
    };

    class B2
    {
    public:
        void output();
    };

    void B1::output()
    {
        cout << "call the class B1" << endl;
    }
    void B2::output()
    {
        cout << "call the class B2" << endl;
    }

    class A:public B1,public B2
    {
    public:
        void show();
    };

    void A::show()
    {
        cout<<"call the class A"<<endl;
    }

    int main()
    {
        std::cout << "Hello World!\r\n";
        A a;
        a.output();//该语句编译的时候会报错
        a.show();
        return 0;
    }

    派生类A是从基类B1和基类B2多重继承而来,二基类B1和B2各有一个output()函数,当类A对象a要调用a.output()时,编译器无法确定用户需要的到底是哪一个基类的output函数,而产生以上错误。

    #include <iostream>
    using namespace std;
    //多重继承
    //一个类可以从多个基类中派生。在派生类由多个基类派生的多重继承模式中,
    //基类是用基类表语法成分来说明的,多重继承的语法与单一继承很类似,
    //只需要在声明继承的多个类之间加上逗号来分隔
    class B1
    {
    public:
        void output1();
    };

    class B2
    {
    public:
        void output2();
    };

    void B1::output1()
    {
        cout << "call the class B1" << endl;
    }
    void B2::output2()
    {
        cout << "call the class B2" << endl;
    }

    class A:public B1,public B2
    {
    public:
        void show();
    };

    void A::show()
    {
        cout<<"call the class A"<<endl;
    }

    int main()
    {
        std::cout << "Hello World!\r\n";
        A a;
        a.output1();
        a.show();
        return 0;
    }

    展开全文
  • /// @brief 测试一个类有多个基类的内存布局(没有虚函数时, 虚函数时) #include #include class CA { public: CA() : iA(1) {} int iA; }; class CB : public CA { public: CB() : iB(2) {}

    没有虚函数时

    /// @file test_class.c
    /// @brief 测试一个类有多个基类的内存布局(没有虚函数时, 有虚函数时)
    
    #include <stdlib.h>
    #include <stdio.h>
    
    class CA {
    public:
        CA() : iA(1) {}
        int iA;
    };
    
    class CB : public CA {
    public:
        CB() : iB(2) {}
        int iB;
    };
    
    class CC : public CB {
    public:
        CC() : iC(3) {}
        int iC;
    };
    
    void fnTest()
    {
        CC a;
    
        /**
        0018FEE4  01 00 00 00  .... ///< 顶层基类CA数据
        0018FEE8  02 00 00 00  .... ///< 基类CB数据
        0018FEEC  03 00 00 00  .... ///< 本类CC数据
        */
    }
    
    int main(int argc, char *argv[])
    {
        fnTest();
        return 0;
    }
    

    有虚函数时

    /// @file test_class.c
    /// @brief 测试一个类有多个基类的内存布局(没有虚函数时, 有虚函数时)
    
    #include <stdlib.h>
    #include <stdio.h>
    
    class CA {
    public:
        CA() : iA(1) {}
        virtual ~CA() {}
        int iA;
    };
    
    class CB : public CA {
    public:
        CB() : iB(2) {}
        virtual ~CB() {}
        int iB;
    };
    
    class CC : public CB {
    public:
        CC() : iC(3) {}
        virtual ~CC() {}
        int iC;
    };
    
    void fnTest()
    {
        CC a;
    
        /**
        0018FEE4  1C 20 42 00  . B. ///< 本类CC虚函数表
        0018FEE8  01 00 00 00  .... ///< 顶层基类CA数据
        0018FEEC  02 00 00 00  .... ///< 基类CB数据
        0018FEF0  03 00 00 00  .... ///< 本类CC数据
        */
    }
    
    int main(int argc, char *argv[])
    {
        fnTest();
        return 0;
    }
    





    展开全文
  • 一个基类Person的多个派生

    千次阅读 2018-05-07 22:47:00
    题目内容: 已知基类Person的定义如下: class Person { protected: char Name[10]; char Sex;...void Register(char *name,int age,char ...请通过继承的方法建立两派生,其中 派生Teache...

    题目内容:

    已知基类Person的定义如下:
    class Person
    {
    protected:
    char Name[10];
    char
    Sex;
    int Age;
    public:
    void Register(char *name,int age,char
    sex);
    void
    ShowMe();
    };
    请通过继承的方法建立两个派生类,其中
    派生类Teacher:
    1.新增的数据成员有:
    char
    Dept[20];
    int
    Salary;
    2.新增的成员函数有:
    构造函数,并使用基类的Register
    3.重写的成员函数有:
    void
    ShowMe() //显示数据成员信息,并使用基类的ShowMe
    派生类Student:
    1.新增的数据成员有:
    char
    ID[12];
    char Class[12];
    2.新增的成员函数有:
    Student(char *name,int age,char
    sex, char *id,char *classid);
    3.重写的成员函数有:
    void
    ShowMe() //显示数据成员信息,并使用基类的ShowMe
    在主程序中分别建立两个派生类对象,利用已有的成员函数分别显示两个派生类对象的数据成员。

    输入格式:

    教师对象的初始化参数

    学生对象的初始化参数

    输出格式:

    请参考输出样例严格按照格式输出教师对象和学生对象的详细信息

    输入样例:

    章立早 38 m 电信学院 2300
    李木子 22 f 02035003 能动01

    输出样例:

    姓名 章立早
    性别 男
    年龄 38
    工作单位 电信学院
    月薪 2300
    学号 02035003
    姓名 李木子
    性别 女
    年龄 22
    班级 能动01

    时间限制:500ms内存限制:32000kb

    #include<iostream>
    #include <cstring>
    using namespace std;
    
    
    class Person
    {
    protected:
        char Name[10];
        char Sex;
        int Age;
    public:
        void Register(char *name,int age,char sex)
        {
            strcpy(Name, name);
            Sex = sex;
            Age = age;
        }
        void ShowMe()
        {
            cout<<"姓名 "<<Name<<endl;
            if(Sex == 'm')
            {
                cout<<"性别 "<<"男"<<endl;
            }
            else
            {
                cout<<"性别 "<<"女"<<endl;
            }
            cout<<"年龄 "<<Age<<endl;
        }
    };
    
    class Teacher:public Person
    {
    private:
        char Dept[20];
        int Salary;
    public:
        Teacher(char *name,int age,char sex,char *dept,int salary)
        {
            Register(name,age, sex);
            strcpy(Dept, dept);
            Salary = salary;
        }
        void ShowMe()
        {
            Person::ShowMe();
            cout<<"工作单位 "<<Dept<<"\n"<<"月薪 "<<Salary<<endl;
        }
    };
    
    class Student:public Person
    {
    private:
        char ID[12];
        char Class[12];
    public:
        Student(char *name,int age,char sex, char *id,char *classid)
        {
            Register(name,age, sex);
            strcpy(ID, id);
            strcpy(Class, classid);
        }
        void ShowMe()
        {
            cout<<"学号 "<<ID<<endl;
            Person::ShowMe();
            cout<<"班级 "<<Class<<endl;
    
        }
    };
    
    int main()
    {
        char tname[10],sname[10],tsex,ssex,dept[20],id[12],_class[12];
        int tage,sage,salary;
        cin>>tname>>tage>>tsex>>dept>>salary;
        Teacher t(tname,tage,tsex,dept,salary);
        cin>>sname>>sage>>ssex>>id>>_class;
        Student s(sname, sage, ssex, id, _class);
        t.ShowMe();
        s.ShowMe();
        return 0;
    }
    展开全文
  • 我写了一个基类,用其派生了多个派生, 接着我生成一个基类数组,再在程序里按输入情况对应将每个数组成员变成派生, 请问这样如何实现? 我试过 p[i]=new student; 但是说i不能是变量
  • C++基类和派生

    千次阅读 2016-10-11 19:13:27
    个基类派生出一个派生,它又做另一个派生的基类,则原来基类为该派生的间接基类。 基类与派生之间的关系可以有如下几种描述: 1 派生是基类的具体化 的层次通常反映了客观世界中某种真实
    .基类和派生类关系 
    任何一个类都有可以派生出上个新类,派生类也可以再派生出新类,因此,基类和派生类是相对而言的。一个基类可以是另一个基类的派生类,这样便形成了复杂的继承结构,出现了类的层次。一个基类派生出一个派生类,它又做另一个派生类的基类,则原来基类为该派生类的间接基类。

    基类与派生类之间的关系可以有如下几种描述:

    1 派生类是基类的具体化
    类的层次通常反映了客观世界中某种真实的模型。例如,定义输入设备为基类,而键盘、鼠标器和数字化板将是派生类,它们关系如图6-3所示,在这种情况下,不难看出:基类是对若于个派生类的抽象,而派生类是基类的具体化。基类抽取了它的派生类的公共牲,而派生类通过增加行为将抽象类变为某种有用的类型。

    2 派生类是基类定义的延续
    先定义一个抽象基类,该基类中有些操作并未实现。然后定义非抽象的派生类,实现抽象基类中定义的操作。例如,虚函数就属此类情况。这时,派生类是抽象的基类的实现,即可看成是基类定义的延续。这也是派生类的一种常用的方法。

    3 派生类是基类的组合
    在多继承时,一个派生类有多于一个的基类,这时派生类将是所有基类行为的组合。如上述派生类风扇台灯类就是基类风扇类和台灯类的组合。

    例题6-1
    下面定义了一个关于交通工具的类
     class vehicle
     {
      int wheels; //轮子数
      float weight; //重量
      public:
      void initialize(int in_wheels, float in_weight);
      int get_wheels( ) {return wheels;}
      float get_weight( ) {return weight;}
      float wheel_loading( ) {return weight/wheels;}
     };
      如果要再定义一个小轿车的类和一个卡车的类,如何实现呢?这里我们就要用到面向对象程序设计的另一个机制--继承。现实世界的物质多种多样,但许多物质都存在着层次关系,这种层次结构是我们找到了描述事物的解决方法。
    下面通过继承来派生出小汽车和卡车的类。
     //小汽车的类
     class car : public vehicle
     {
      int passenger_load; //载客数
      public:
      void initialize(int in_wheels, float in_weight, int people = 4);
      int passengers( ) {return passenger_load;}
     };
     //卡车的类
     class truck : public vehicle
     {
      int passenger_load; //载客数
      float payload; //有效负载
      public:
      void init_truck(int how_many = 2, float max_load = 24000.0);
      float efficiency( ); //马力
      int passengers( ) {return passenger_load;}
     };
      说明:上面通过继承从类vehicle中派生出了car和truck两个类。我们把vehicle称为基类,把car和truck称为派生类或子类
    展开全文
  • 继承多个基类

    千次阅读 2010-05-31 16:29:00
    测试代码: #include<iostream><br />using namespace std; class base1{ protected:  int m; public:  void show_m(){cout;} }; class base2{ protected:...
  • 可以实现代码的重用,例如,模板方法设计模式是抽象一个典型应用,假设某个项目的所有Servlet都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就可以定义一个抽象的基类,让所有的Servlet都继承这...
  • 派生基类

    2019-06-18 14:40:31
    继承从已派生出新的,而派生继承了原有基类)的数据成员和方法。 派生不能直接访问基类的私有成员,必须通过基类方法进行访问。 因此,派生构造函数必须使用基类构造函数(通过成员初始化...
  •  Teacher的数据成员中还有之职称job、工资salary,Leader的数据成员还有职务duty,却这两个类输出自己信息的成员函数show。 c. 在中声明成员函数,在外实现 d. 使用虚基类来避免继承中的二义性。
  • 基类与派生

    千次阅读 2019-03-13 17:02:44
    A是一个基类,B是一个派生. 一个类最多只允许从一个类中派生. class C : B{} B还可以充当C的派生 继承总是隐式为public的,System.Object是所有的根 编译器会把你的悄悄的编译成 class A : System.Object{} 2....
  • C++之基类与派生

    千次阅读 2015-03-08 20:59:07
    C++语言中,通过继承的机制,可以利用已的类型来定义新的类型。所定义的新类型拥有原来类型的属性,同时还...派生类可以只从个基类中派生,也可以聪哥多个基类中派生。  在使用class定义派生时,默认的继承方
  • 派生基类的关系

    千次阅读 2015-12-03 22:30:16
    一个类派生出另一个类时,原始称为基类,继承称为派生。 派生基类的关系: 1. 派生对象存储了基类的数据成员 2. 派生对象可以使用基类的方法 如下例:“` class BaseClass { private: ...
  • 继承直接基类与间接基类规则

    千次阅读 2019-12-05 11:26:37
    1、C++中继承可以层次的 (1)继承直接基类与间接基类规则如下: 在声明派生时,只需要列出它的直接基类 派生沿着的层次自动向上继承它的间接基类 (2) 派生的成员包括: 派生自己定义的成员 直接...
  • C++ 基类和派生

    2014-08-01 17:29:15
    转自C++ 基类和派生 本讲讨论基类和派生的基本概念。 ... 通过继承机制,可以利用已的数据类型来定义新的数据... 在C++语言中,一个派生类可以从一个基类派生,也可以多个基类派生。从一个基类派生的继承
  • #include  using namespace std;   const float PI = (float)3.14159;   class Shape{ public:  virtual float CalCircumference()=0;  virtual float CalArea()=0;...//
  • 不是抽象基类不是好基类

    千次阅读 2012-03-23 16:39:33
    基类可以是具体、虚和抽象三种,对派生没有要求。其中具体是没有虚函数的,其所有方法都提供了具体实现;派生方法如果和基类方法同名,则派生方法隐藏(overwrite)了基类方法。虚是包含虚函数的...
  • 定义一个公共基类Shape,它表示一个封闭平面几何图形。 然后,从Shape派生出三角形Triangle、矩形Rectangle和圆Circle, 在基类中定义纯虚函数show和area,分别用于显示图形信息和求相应图形的面积, 并...
  • 基类与派生的转换  3种继承方式(公用、保护、私有继承)中,公用派生才是...基类与派生对象之间赋值兼容关系,由于派生中包含从基类继承的成员,因此可以将派生的值赋给基类对象,在用到基类对象
  • 只有公用继承能较好地保留基类的特征,它保留了除构造函数和析构函数以外的基类所有成员,基类的公用或保护成员的访问权限在派生中全部都按原样保留下来了,在派生可以调用基类的公用成员函数访问基类的私有...
  • 定义一个基类BaseClass,从它派生出DerivedClass。BaseClass成员函数fn1(),fn2(),DerivedClass也成员函数fn1(),fn2(),在主函数中声明一个DerivedClass的对象,分别用DerivedClass的对象以及BaseClass和...
  • 在C++语言中,一个派生类可以从一个基类派生,也可以多个基类派生。从一个基类派生的继承称为单继承;从多个基类派生的继承称为多继承。 派生的定义格式 单继承的定义格式如下: class <派生类名>:<...
  • 基类和派生

    2013-05-05 21:38:46
    * 继承意味着派生继承了基类的所有特性,基类的所有数据成员和成员函数自动成为派生的数据成员和成员函数。如: “形状”具有位置、大小、颜色等属性,...* 派生不完全等同于基类,派生类可以添加自己特有的
  • 基类

    千次阅读 2018-03-11 16:05:58
    当在多条继承路径上有一个公共的基类,在这些路径的某几条汇合处,这个公共的基类就会产生多个实例(或多个副本),若只想保存这个基类一个实例,可以将这个公共基类说明为虚基类、 class CBase { }; class ...
  • 派生基类的函数调用

    千次阅读 2015-05-13 22:57:05
    这篇文章举了一个简单的例子说明派生基类在虚函数和普通函数的问题; 首先声明派生基类,并进行定义,如下所示: 声明部分(Header.h): class FATHER { public: void FUN1(); virtual void virtualFUN2...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 332,105
精华内容 132,842
关键字:

一个类可以有多个基类