精华内容
下载资源
问答
  • 2020-07-09 16:13:49

    派生类构造函数

    构造派生类对象流程:基类构造函数->派生类构造函数
    
    析构派生类对象流程:派生类析构函数->基类析构函数
    
    派生类实际上是使用基类的构造函数来初始化其基类部分。
    
    传递参数给基类构造函数问题:通过派生类的构造函数初始化列表
    

    代码:

    #include<iostream>
    using namespace std;
    
    class Human {
       
    public:
    	Human
    更多相关内容
  • 派生类的数据成员由所有基类的数据成员与派生类新增的数据成员共同组成,如果派生类新增成员中包括其他类的对象(子对象),派生类的数据成员中实际上还间接包括了这些对象的数据成员。
  • C++:派生类构造函数

    2021-01-21 21:17:50
    派生类构造函数 默认情况 基类的构造函数不被继承; 派生类需要定义自己的构造函数。 C++11规定 using B::B; 派生类新增成员可以通过类内初始值进行初始化。 可用using语句继承基类构造函数。但是...

    派生类构造函数

    • 默认情况

      • 基类的构造函数不被继承;

      • 派生类需要定义自己的构造函数。

    C++11规定

    using B::B;

    • 派生类新增成员可以通过类内初始值进行初始化。

    • 可用using语句继承基类构造函数。但是只能初始化从基类继承的成员。

    语法形式:

    建议
    如果派生类有自己新增的成员,且需要通过构造函数初始化,则派生类要自定义构造函数。

    若不继承基类的构造函数

    • 派生类新增成员:派生类定义构造函数初始化;

    • 继承来的成员:自动调用基类构造函数进行初始化;

    • 派生类的构造函数需要给基类的构造函数传递参数。

    单继承

    • 派生类只有一个直接基类的情况,是单继承。单继承时,派生类的构造函数只需要给一个直接基类构造函数传递参数。

    单继承时构造函数的定义语法

    派生类名::派生类名(基类所需的形参,本类成员所需的形参):
    基类名(参数表), 本类成员初始化列表
    {
    //其他初始化;
    };

    单继承时的构造函数举例

    #include<iostream>
    using namespace std;
    class B {
    public:
        B();
        B(int i);
        ~B();
        void print() const;
    private:
        int b;
    };
    
    B::B() {
        b=0;
        cout << "B's default constructor called." << endl;
    }
    B::B(int i) {
        b=i;
        cout << "B's constructor called." << endl;
    }
    B::~B() {
        cout << "B's destructor called." << endl;
    }
    void B::print() const {
        cout << b << endl;
    }
    
    class C: public B {
    public:
        C();
        C(int i, int j);
        ~C();
        void print() const;
    private:
        int c;
    };
    C::C() {
        c = 0;
        cout << "C's default constructor called." << endl;
    }
    C::C(int i,int j): B(i), c(j){
        cout << "C's constructor called." << endl;
    }
    
    C::~C() {
        cout << "C's destructor called." << endl;
    }
    void C::print() const {
        B::print();
        cout << c << endl;
    }
    
    int main() {
        C obj(5, 6);
        obj.print();
        return 0;
    }
    

    多继承

    • 多继承时,有多个直接基类,如果不继承基类的构造函数,派生类构造函数需要给所有基类构造函数传递参数。我们来看一下语法规定

    多继承时构造函数的定义语法

    派生类名::派生类名(参数表) :
    基类名1(基类1初始化参数表),
    基类名2(基类2初始化参数表),

    基类名n(基类n初始化参数表),
    本类成员初始化列表
    {
    //其他初始化;
    };

    派生类与基类的构造函数

    • 当基类有默认构造函数时

      • 派生类构造函数可以不向基类构造函数传递参数。

      • 构造派生类的对象时,基类的默认构造函数将被调用。

    • 如需执行基类中带参数的构造函数

      • 派生类构造函数应为基类构造函数提供参数。

    多继承且有对象成员时派生的构造函数定义语法

    派生类名::派生类名(形参表):
    基类名1(参数), 基类名2(参数), …, 基类名n(参数),
    本类成员(含对象成员)初始化列表
    {
    //其他初始化
    };

    构造函数的执行顺序

    • 调用基类构造函数。

      • 顺序按照它们被继承时声明的顺序(从左向右)。
    • 对初始化列表中的成员进行初始化。

      • 顺序按照它们在类中定义的顺序。

      • 对象成员初始化时自动调用其所属类的构造函数。由初始化列表提供参数。

    • 执行派生类的构造函数体中的内容。

    派生类构造函数举例

    #include <iostream>
    using namespace std;
    class Base1 {//基类Base1,构造函数有参数
    public:
        Base1(int i) 
      { cout << "Constructing Base1 " << i << endl; }
    };
    class Base2 {//基类Base2,构造函数有参数
    public:
        Base2(int j) 
      { cout << "Constructing Base2 " << j << endl; }
    };
    class Base3 {//基类Base3,构造函数无参数
    public:
        Base3() 
      { cout << "Constructing Base3 *" << endl; }
    };
    
    class Derived: public Base2, public Base1, public Base3 {
    public: 
        Derived(int a, int b, int c, int d): Base1(a), member2(d), member1(c), Base2(b)
      //此处的次序与构造函数的执行次序无关
        { }
    private:
        Base1 member1;
        Base2 member2;
        Base3 member3;
    };
    
    int main() {
        Derived obj(1, 2, 3, 4);
        return 0;
    }
    
    展开全文
  • C++派生类构造函数的写法

    千次阅读 2020-04-06 09:46:42
    定义基类shape,它有默认的构造函数和析构函数; 把点point类声明为shape的派生类,它包含两个数据成员x和y和输出函数display(); 把圆circle定义为点point类的派生类,它在点point的基础上增加一个数据成员radius...

    老师布置的作业要求:

    定义基类shape,它有默认的构造函数和析构函数;

    把点point类声明为shape的派生类,它包含两个数据成员x和y 和输出函数display();

    把圆circle定义为点point类的派生类,它在点point的基础上增加一个数据成员radius;

    并增加输出成员函数 display ()和求面积成员函数area()。

     

    代码如下

    #include<iostream>
    using namespace std;
    #define PI 3.1415926
    class shape
    {
    
    };
    
    class point:public shape
    {
    protected:
        double x;
        double y;
    public:
        point(double xx,double yy)
        {
            x = xx;
            y = yy;
        }
        void Display()
        {
            cout<<"("<<x<<","<<y<<")"<<endl;
        }
    };
    
    class circle:protected point//保护继承point
    {
    private:
        double radius;
    public:
        circle(double xx,double yy,double r):point(x, y)//应该是这样写!注意这里继承的基类里面的参数不要加数据类型,否则会报错
        {
            x = xx;
            y = yy;
            radius = r;
        }
        void Display()
        {
            cout<<"圆心为"<<"("<<x<<","<<y<<"),半径为"<<radius<<endl;
        }
        double area()
        {
            return PI*radius*radius;
        }
    };
    int main()
    {
        point p1(2.3,5.1);
        point p2(1,3);
        p1.Display();
        p2.Display();
    
        circle c1(0,0,1);
        circle c2(1.2,2.3,5);
        c1.Display();
        cout<<c1.area()<<endl;
        c2.Display();
        cout<<c2.area()<<endl;
        return 0;
    }

     

    展开全文
  • C++继承派生类构造函数的写法

    千次阅读 2019-06-16 22:51:01
    C++有三大思想:抽象与封装、继承与派生、多态性,是c++开发人员面对对象编程必须掌握的知识。 初学者对子类继承中构造函数的写法有时会存在一些问题。即子类继承基类时,子类的...②再执行派生类构造函数本身(...

    C++有三大思想:抽象与封装、继承与派生、多态性,是c++开发人员面对对象编程必须掌握的知识。

    初学者对子类继承中构造函数的写法有时会存在一些问题。即子类继承基类时,子类的构造函数如何实现呢?如何调用基类的成员变量?相信大部分初学c++时,都会遇到类似的问题。

    我们都知道继承中,当子类建立一个对象时,执行构造函数的顺序是:

    ①派生类构造函数先调用基类的构造函数

    ②再执行派生类构造函数本身(即派生类构造函数的函数体)

    派生类的构造函数可以大致分为:

    a.简单的派生类的构造函数 

    格式:

    派生类构造函数名(总参数表):基类构造函数名(参数表)

    {

    派生类中新增数据成员初始化语句

    }

    b.有子对象的派生类的构造函数

    格式:

    派生类构造函数名(总参数表):基类构造函数名(参数表),子对象名(参数表)

    {

    派生类中新增数据成员初始化语句

    }

    c.多层派生时的构造函数  

    注意:不是定义基类构造函数,而是调用积累的额构造函数,因此这些参数是实参而不是形参。

     

    下面用代码讲解一下子类构造函数的实现。

    ①定义class A,class B继承class A,class C继承class B:

    class A
    {
    public:
    
    	A(int a1, int b1, char c1);
    	int a;
    	int b;
    	char c;
    };
    class B : public A
    {
    public:
    	B();
    	B(int a1, int b1, char c1);
    };
    class C :public B
    {
    public:
    	C();
    	C(int a1, int b1, char c1);
    };
    

     class A的构造函数实现:

    A::A(int a1, int b1, char c1)
    {
    	a = a1;
    	b = b1;
    	c = c1;
    }

    ②class B的构造函数实现

    B::B() :A(a, b, c)//调用基类的成员变量值
    {
    	a = 20;
    	b = 10;
    	c = 'g';
    }
    B::B(int a1, int b1, char c1) :A(a, b, c)//构造函数的重载
    {
    	a = a1;
    	b = b1;
    	c = c1;
    }

    ③class C的构造函数实现

    C::C() :B()
    {
    
    }
    C::C(int a1, int b1, char c1) : B(a,b,c)
    {
    	a = a1;
    	b = b1;
    	c = c1;
    
    }
    //C::C(int a1, int b1, char c1) : B()//与上面一样
    //{
    //	a = a1;
    //	b = b1;
    //	c = c1;
    //}

    ④main函数代码:

    int main(int argc, char *argv[])
    {
    	A ff(1, 2, 'c');
    	cout << ff.a <<" "<< ff.b <<" "<< ff.c << endl;
    	B b1;
    	cout << b1.a <<" "<< b1.b <<" "<< b1.c << endl;
    	B b2(10,10,'i');
    	cout << b2.a << " " << b2.b << " " << b2.c << endl;
    
    	C c1;
    	cout << c1.a << c1.b << c1.c << endl;
    	C c2(100,100,'u');
    	cout << c2.a << c2.b << c2.c;
    
    	system("pause");
    	return 0;
    }

    结果: 1  2  c

    20 10 g

    10 10 i

    20 10 g

    100 100 u

    展开全文
  • 派生类构造函数和析构函数的执行顺序 链接: link. #include <iostream> using namespace std; class Contained1 { public: Contained1() { cout << "Contained1 ctor\n"; }//构造constructor ~...
  • #C++ 1:派生类构造函数的类外定义 最近上课在看课本的时候发现派生类都是在类内定义的,自己写代码想要按普通类的方式类外定义的时候出现了报错,如下: //CPerson的派生类:CStudent class CStudent:public ...
  • 派生类构造函数可以自动调用基类的默认构造函数,但是前提是默认构造函数必须存在。通常情况下,默认构造函数系统会自动生成的,但是如果在基类中,我们自己定义了一个带参数的构造函数,这个时候,系统是不会为基类...
  • 派生类构造函数

    2017-03-30 18:35:22
    1、 构造函数和复制控制成员不能继承,每个类定义自己的构造函数和复制控制成员。像任何类一样,如果类不定义自己的默认构造函数和复制控制成员,就将使用合成版本。 2、 派生类的合成默认...相反派生类构造函数
  • 多重继承派生类构造函数

    千次阅读 2019-06-03 16:54:28
    #include<iostream> #include<string> using namespace std; class Teacher { public: Teacher(string nam, int a, string t) { name = nam; age = a; title = t; ... cou...
  • 6-5 多重继承派生类构造函数

    千次阅读 2020-05-15 17:16:55
    //编者注:考题版权归属版权方,作答代码...根据所给的基类Student和Teacher,定义Graduate 定义: #include <iostream> #include <string> using namespace std; class Teacher {public: Teach
  • 派生类构造函数的调用顺序: 基类的构造函数(如果有多个基类,按照基类的声明顺序来构造,声明顺序也就是class C:冒号后面这个顺序);该派生类的成员变量的声明顺序;该派生类自身的构造函数 派生类析构的顺序:...
  • 但有一点与私有成员不同,保护成员可以被派生类的成员函数引用。 如果基类声明了私有成员,那么任何派生类都是不能访问它们的,若希望在派生类中能访问它们,应当把它们声明为保护成员。如果在一个类中声明了保护...
  • #include<iostream> using namespace std; class Base//声明基类base { public: Base(int sa) ...class Base1:virtual public Base//声明base是base1的虚基类 { public: Base1(int
  • 6-5 多重继承派生类构造函数 (10分) 根据所给的基类Student和Teacher,定义Graduate类 类定义: #include <iostream> #include <string> using namespace std; class Teacher {public: Teacher...
  • 1.派生类构造函数的一般形式为: 派生类构造函数名(总参数表):基类构造函数名(参数表) { 派生类中新增加数据成员初始化语句 } 2.在建立一个对象时,执行构造函数的顺序是: a.派生类构造函数先调用基类...
  • 《Visual C++2012入门经典(第6版)》实例,在派生类构造函数中调用基类的构造函数
  • 1.派生类的构造函数  当基类的构造函数没有参数,或没有显示定义构造函数时,派生类可以不向基类传递参数,甚至可以不定义构造函数. ...在C++中派生类构造函数的一般形式为: 派生类名(参数总表):基类名(参数表)
  • 根据所给的基类Student和Teacher,定义Graduate 定义: #include <iostream> #include <string> using namespace std; class Teacher {public: Teacher(string nam,int a,string t) {name=nam...
  • 派生类构造函数顺序

    2017-03-24 16:00:10
    派生类构造函数执行顺序是(从左向右顺序): 虚基类构造函数 普通基类构造函数 子类构造函数 其他 派生类析构函数顺序,与构造函数相反顺序 其他:基类可以是虚基类(添加virtual 关键字),虚基类的作用是避免...
  • 派生类构造函数

    2021-06-13 18:11:29
    派生类构造函数 基类的构造函数和析构函数派生类是不能继承的。如果派生类需要对新成员初始化或者进行特定的清理工作,就需要自己定义构造函数和析构函数了。从基类继承的成员的初始化仍可通过基类的构造函数来...
  • 题目 根据所给的基类Student和Teacher,定义Graduate 定义: #include <iostream> #include <string> using namespace std; class Teacher {public: ...
  • C++派生类构造函数

    2018-06-21 19:44:51
    派生类构造函数执行的一般次序如下: 1、调用基类构造函数,调用顺序按照它们被继承时声明的顺序(从左向右)。 2、对派生类新增的成员对象初始化,调用顺序按照它们在类中声明的顺序。 3、执行派生类的构造函数...
  • 在C++中,构造函数不能被继承,因此,派生类构造函数必须通过调用基类的构造函数来初始化基类子对象。 在派生类初始化列表直接初始化基类的成员,被称为“越级初始化”,是会报错的。 举个栗子: 我们先创建一个...
  • 派生类构造函数的执行顺序       下面给出一个例子   代码: 1 #include 2 3 using namespace std; 4 5 6 //打印函数名辅助宏 7 #define PRINT_FUNC_NAME()\ 8 cout endl; 9 10...
  • C++派生类构造函数执行次序: 调用基类构造函数,调用顺序为被继承时的顺序(左->右)对派生类的新增成员对象初始化,调用顺序是声明时的顺序。调用顺序都和初始化列表中的顺序无关
  • 派生类构造函数的任务应该包括3个部分: 对基类数据成员初始化; 对子对象数据成员初始化; 对派生类数据成员初始化。 程序中派生类构造函数首部如下: Student1(int n, string nam,int n1, string nam1,int a, ...
  • 一般----派生类构造函数的写法

    千次阅读 2016-10-11 14:18:54
    定义派生类构造函数应该包括三部分内容 (1)对基类数据成员进行初始化 (2)对子对象数据成员进行初始化 (3)对派生类数据成员初始化 一般形式为: 派生类构造函数名(总参数表):基类构造函数名(参数表)...
  • 派生类构造函数规则

    千次阅读 2015-01-19 16:21:12
    派生类构造函数规则 如果基类拥有构造函数但是没有默认构造函数,那么派生类的构造函数必须显示的调用基类的某个构造函数。   以B类从A类派生为例,我们总结如下: 1、若B有构造函数而A没有,当创建B类的对象时,B...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 160,393
精华内容 64,157
关键字:

派生类构造函数

友情链接: msg.rar