【C++】C++自学进阶(6):继承(2)——继续进阶

  继承类不能继承基类的构造函数和析构函数,如果派生类需要的话,我们需要为派生类全新定义构造函数和析构函数。
一、单继承的构造函数

class Person
{
protected:
    char name[10];
    char sex;
public:
    //The Constructor of the base class
    Person(char name[],char sex):sex(sex)
    {
        cout<<"Base class constructor!"<<endl;
        strcpy(this->name,name);
    }
};
class Student::public Person
{
private:
    int number;
public:
    //Constructor of the derived class
    Student(int number,char name[],char sex):Person(name,sex)
    {
        cout<<"Derived class constructor!"<<endl;
        this->number = number;
    }
};

这个部分的干货:
  1. 继承类的构造函数只能初始化它自己新定义的数据,不能初始化从基类继承过来的东西,因此需要在定义继承类的构造函数时调用基类的构造函数,就像这样:

Student(int number,char name[],char sex):Person(name,sex){...}

  2. 定义派生类对象时,会首先运行派生类的构造函数,但是其构造函数会链接到基类的构造函数,所以实际上首先运行的是基类的构造函数。

  3. 如果继承类的构造函数中不写基类的构造函数,编译会出错,因为编译器会默认链接到默认基类构造函数,然而这个函数不存在。

  4. 执行顺序与写的顺序无关,总会先执行基类的构造函数。

时间: 2024-10-23 23:40:52

【C++】C++自学进阶(6):继承(2)——继续进阶的相关文章

ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL

http://www.cnblogs.com/John-Connor/archive/2012/05/03/2478821.html 引言-- 在初级篇中,我们介绍了如何利用基于ASP.NET MVC的Web程序中的Global文件来简单的重写路由.也介绍了它本身的局限性-依赖于路由信息中的键值对: 如果键值对中没有的值,我们无法将其利用凑出我们想要的URL表达式. 初级篇传送门:使用Global路由表定制URL   在进阶篇中,我们将介绍ASP.NET 路由相关类的基类-抽象类RouteBas

Python进阶-----类继承的方式完成包装

包装:python为大家提供了标准数据类型,以及丰富的内置方法,其实在很多场景下我们都需要基于标准数据类型来定制我们自己的数据类型,新增/改写方法,这就用到了我们刚学的继承/派生知识(其他的标准类型均可以通过下面的方式进行二次加工) class List(list): #继承list所有的属性,也可以派生出自己新的,比如append和mid def append(self, p_object): ' 派生自己的append:加上类型检查' if not isinstance(p_object,i

C++进阶--公有继承的二元性

//########################################################################### /* * 公有继承的两元性 * * - 接口的继承 * - 实现的继承 */ class Dog { public: virtual void bark() = 0; //只继承了接口 void run() { cout << "I am running."; } //既继承了接口,也继承了实现 virtual void

Java自学-接口与继承 重写

Java 重写方法 子类可以继承父类的对象方法 在继承后,重复提供该方法,就叫做方法的重写 又叫覆盖 Override 步骤 1 : 父类Item 父类Item有一个方法,叫做effect package property; public class Item { String name; int price; public void buy(){ System.out.println("购买"); } public void effect() { System.out.println

Java自学-接口与继承 抽象类

Java 抽象类 在类中声明一个方法,这个方法没有实现体,是一个"空"方法 这样的方法就叫抽象方法,使用修饰符"abstract" 当一个类有抽象方法的时候,该类必须被声明为抽象类 步骤 1 : 抽象类 为Hero增加一个抽象方法 attack,并且把Hero声明为abstract的. APHero,ADHero,ADAPHero是Hero的子类,继承了Hero的属性和方法. 但是各自的攻击手段是不一样的,所以继承Hero类后,这些子类就必须提供不一样的attack

[菜鸟成长记]iOS开发自学笔记03-UITableView初级进阶之cell的删除

上一节在自定义UITableView表视图单元格的基础上,实现了一个简单的表视图界面,包含了一些自定义的界面元素在内.苹果的产品从iPhone到MAC都提供了多种多样的手势操作以彰显其操作的人性化,在如“邮件”等系统自带软件的表视图单元格中,每个单元格向左滑动即可在最右边出现删除按钮,以方便用户快速地对所选择行执行删除操作.其实实现这个功能并不难,仅仅只需要在ViewController中实现UITableViewDataSource协议中的方法 - (void)tableView:(UITab

Java自学-接口与继承 多态

Java的多态 操作符的多态 +可以作为算数运算,也可以作为字符串连接 类的多态 父类引用指向子类对象 示例 1 : 操作符的多态 同一个操作符在不同情境下,具备不同的作用 如果+号两侧都是整型,那么+代表 数字相加 如果+号两侧,任意一个是字符串,那么+代表字符串连接 package charactor; public class Hero { public String name; protected float hp; public static void main(String[] ar

Java自学-接口与继承 super

Java的super关键字 步骤 1 : 准备一个显式提供无参构造方法的父类 准备显式提供无参构造方法的父类 在实例化Hero对象的时候,其构造方法会打印 "Hero的构造方法 " package charactor; import property.Item; public class Hero { String name; //姓名 float hp; //血量 float armor; //护甲 int moveSpeed; //移动速度 public void useItem(

Java自学-接口与继承 内部类

Java 内部类 内部类分为四种: 非静态内部类 静态内部类 匿名类 本地类 步骤 1 : 非静态内部类 非静态内部类 BattleScore "战斗成绩" 非静态内部类可以直接在一个类里面定义 比如: 战斗成绩只有在一个英雄对象存在的时候才有意义 所以实例化BattleScore 的时候,必须建立在一个存在的英雄的基础上 语法: new 外部类().new 内部类() 作为Hero的非静态内部类,是可以直接访问外部类的private实例属性name的 package characto

JAVA如何进阶架构师,Java进阶之路——从初级程序员到架构师,从小工到专家

怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作三五年之后开始迷茫的老程序员经常会问到的问题.希望这篇文章会是你看到过的最全面最权威的回答. 一: 编程基础 不管是C还是C++,不管是Java还是PHP,想成为一名合格的程序员,基本的数据结构和算法基础还是要有的.下面几篇文章从思想到实现,为你梳理出常用的数据结构和经典算法. 1-1 常用数据结构 数组.链表.堆.栈.队列.Hash表.二叉树等