zoukankan      html  css  js  c++  java
  • 【C++继承与派生之二】有子对象的派生类的构造函数

    这是我今天看书刚刚看到的,觉着以前对这一块内容了解不多,所以整理一下分享给大家。首先要介绍一下子对象的概念。类的数据成员不仅可以是int、char这样的基本类型,也可以是类对象,如可以包含这样的数据成员:

    Student s1;     //Student是已经声明的类


    这时s1就是类对象中的内嵌对象,即为 子对象,这与结构体类型的成员可以是结构体变量类似。

    回顾一下简单派生类构造函数的写法:

    class student
    {
    public:
    	student(int n,string nam,char s){
    	num=n;
    	name=nam;
    	sex=s;
    	}
    	~student(){}
    protected:
    	int num;
    	string name;
    	char sex;
    };
    class student1:public student{
    public:
    	student1(int n,string nam,char s,int a,string ad):student(n,nam,s){
    		age=a;
    		addr=ad;
    	}
    	~student1(){}
    private:
    	int age;
    	string addr;
    };
    

    派生类一般构造函数格式为

    派生类名 (总参数列表):基类名(参数列表){派生类新增数据成员初始化语句;}

    子对象的派生类构造函数如何写呢?

    我们都知道对象应该在建立之时就初始化,但显然子对象的初始化不能在声明派生类时就对它进行,因为类是抽象类型,只是一个模型,不能有具体的数据。所以子对象的初始化是在建立派生类时通过调用派生类构造函数来实现的。在刚才的例子中增加一个班长项,班长的类型很显然就是student,所以它是一个子对象,现在构造函数如下:

    student1(int n,string nam,char s,int n1,string nam1,char s1,int a,string ad):
    		student(n,nam,s),monitor(n1,nam1,s1){
    		age=a;
    		addr=ad;
    	}


    在上面构造函数中一共有八个参数,前三个是基类构造函数的参数,第4、5、6个参数是子对象构造函数参数,最后两个是用作派生类数据成员初始化的。

    归纳一下,构造函数格式如下

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

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



  • 相关阅读:
    BZOJ 3205 [Apio2013]机器人 ——斯坦纳树
    BZOJ 3782 上学路线 ——动态规划 Lucas定理 中国剩余定理
    HDU 1423 Greatest Common Increasing Subsequence ——动态规划
    BZOJ 3309 DZY Loves Math ——莫比乌斯反演
    POJ 1038 Bugs Integrated, Inc. ——状压DP
    POJ 3693 Maximum repetition substring ——后缀数组
    POJ 2699 The Maximum Number of Strong Kings ——网络流
    POJ 2396 Budget ——有上下界的网络流
    BZOJ 4650 [Noi2016]优秀的拆分 ——后缀数组
    源码安装python
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3324815.html
Copyright © 2011-2022 走看看