c++中的继承--2(继承中的析构函数和构造函数,继承中同名成员,继承中静态成员)

继承中的构造函数和析构函数

继承中的构造和析构顺序

  1. 子类创建对象时,先调用父类的构造,然后调用自身构造
  2. 析构顺序与构造顺序相反
  3. 子类不会继承父类的构造函数和析构函数
  4. 如果父类中没有合适默认构造,那么子类可以利用初始化列表的方式显示的调用父类的其它构造
#include<iostream>using namespace std;class Base
{
public:Base(){cout << "Base默认构造函数调用" << endl;}~Base(){cout << "Base的析构函数的调用" << endl;}
};
//子类会继承父类的成员属性,成员属性
//但是 子类 不会继承 父类 构造函数 和 析构函数
//只有父类自己知道如果构造和析构自己的属性,而子类不知道class Son :public Base
{
public:Son(){cout << "Son默认构造函数的调用" << endl;}~Son(){cout << "Son的析构函数的调用" << endl;}
};class Base2
{
public:Base2(int a){this->m_A = a;cout << "有参构造函数调用" << endl;}int  m_A;
};class Son2 :public Base2
{
public:Son2(int a)	: Base2(10)	//利用初始化列表方式 显示调用 有参构造{}
};void test02()
{Son2 s2(1000);
}void test01()
{//Base b1;Son s1;
}int main()
{test01();system("pause");return 0;
}

注意:

  1.  派生类的构造函数必须调用基类的构造函数初始化基类的那一部分成员。如果基类没有默认的构造函 数,则必须在派生类构造函数的初始化列表阶段显示调用。
  2. 派生类的拷贝构造函数必须调用基类的拷贝构造完成基类的拷贝初始化。
  3.  派生类的operator=必须要调用基类的operator=完成基类的复制。
  4. 派生类的析构函数会在被调用完成后自动调用基类的析构函数清理基类成员。因为这样才能保证派生类 对象先清理派生类成员再清理基类成员的顺序。
  5. 派生类对象初始化先调用基类构造再调派生类构造。
  6. 派生类对象析构清理先调用派生类析构再调基类的析构 

继承中同名成员

继承中的同名处理

  1. 成员属性 直接调用先调用子类,如果想调用父类,需要作用域
  2. 成员函数 直接调用先调用子类,父类的所有版本都会被隐藏,除非显示用作用域运算符去调用
#include<iostream>using namespace std;class Base
{
public:Base(){m_A = 100;}void fun(){cout << "Base func的调用" << endl;}void fun(int a){cout << "Base func(int a)的调用" << endl;}int m_A;
};class Son :public Base
{
public:Son(){m_A = 200;}void fun(){cout << "Son func的调用" << endl;}int m_A;
};void test01()
{Son s1;cout << s1.m_A << endl;//想调用 父类中的m_Acout << s1.Base::m_A << endl;//s1.fun(10);//调用父类的funcs1.Base::fun();
}
//如果父类和子类拥有同名的函数 属性 子类不会覆盖父类成员
//如果子类与父类的成员函数名称相同 子类会把父类的所有同名版本都隐藏掉
//想调用父类的方法,必须加作用域int main()
{test01();system("pause");return 0;
}

 

注意:

1. 在继承体系中基类和派生类都有独立的作用域。

2. 子类和父类中有同名成员,子类成员将屏蔽父类对同名成员的直接访问,这种情况叫隐藏,也叫重定 义。(在子类成员函数中,可以使用 基类::基类成员 显示访问)

3. 需要注意的是如果是成员函数的隐藏,只需要函数名相同就构成隐藏。

4. 注意在实际中在继承体系里面最好不要定义同名的成员。

继承中静态成员

  1. 类似非静态成员函数处理
  2. 如果想访问父类中的成员,加作用域即可
#include<iostream>using namespace std;class Base
{
public:static void func(){cout << "Base func()" << endl;}static void func(int a){cout << "Base func(int a)" << endl;}static int m_A;
};
int Base::m_A = 10;class Son :public Base
{
public:static void func(){cout << "Son func()" << endl;}static int m_A;
};int Son::m_A = 20;
//静态成员属性 子类可以继承下来
void test01()
{cout << Son::m_A << endl;//访问父类的m_Acout << Base::m_A << endl;Son::func();//访问父类中同名的成员函数Son::Base::func();
}int main()
{test01();system("pause");return 0;
}

注意:

  1. 静态成员和非静态成员都可以被继承到派生类中
  2. 如果重新定义一个静态成员函数,所有在基类中的其他重载函数会被隐藏
  3. 如果我们改变基类中一个函数的特征,所有使用该函数的基类版本都会被隐藏

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/383308.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux锁机制和线程安全

锁机制是多线程编程中最常用的同步机制&#xff0c;用来对多线程间共享的临界区进行保护。 1. 互斥锁&#xff1a;pthread_mutex&#xff0c;属于sleep-waiting类型的锁 pthread_mutex_t *mutex; int pthread_mutex_int(mutex, attr) //以动态方式创建互斥锁&#xff0c;参…

c++中的继承--3(多继承问题,菱形继承)

继承中的多继承 #include<iostream>using namespace std;class Base1 { public:Base1(){m_A 10;} public:int m_A;};class Base2 { public:Base2(){m_A 10;} public:int m_B;int m_A;};class Son :public Base1, public Base2 {public:int m_C;int m_D; };void test01…

c++中的多态---1(多态概念,静态联编和动态联编,多态原理解析,重载,重写,重定义的对比)

多态的基本概念 多态是面向对象设计语言数据抽象和继承之外的第三个基本特征多态性(polymorphism)提供接口与具体实现之间的另一层隔膜&#xff0c;从而将“what”和“how”分离开来&#xff0c;多态性改善了代码的可读和组织性&#xff0c;同时也使创建的程序具有可扩展性&am…

Ubuntu下各种服务搭建及操作技巧

Ubuntu下搭建TFTP 1、安装软件包 sudo apt-get install tftpd tftp xinetd 2、建立配置文件 在/etc/xinetd.d/下建立一个配置文件tftp sudo vi /etc/xinetd.d/tftp 内容如下 service tftp { socket_type dgram protocol udp wait yes user root …

c++多态--2(计算器,纯虚函数和抽象类)

为什么要用多态 早期方法不利于扩展开闭原则 开闭原则 对扩展开放 对修改关闭利用多态实现—利于后期扩展&#xff0c;结构性非常好&#xff0c;可读性高&#xff0c;效率稍微低&#xff0c;发生多态内部结构复杂 多态成立的条件 又继承 子类重写父类虚函数的函数&#xff1…

使用Automake和Autoconf生成Makefile

automake 所产生的 Makefile 除了可以做到程序的自动编译和链接 外&#xff0c;还可以用来生成各种文档&#xff08;如manual page、info文件&#xff09;&#xff0c;可以将源代码文件包装起来以供发布。所以程序源代码所存放的目录 结构最好符合GNU的标准惯例。下面以hello.…

c++中多态---3(虚析构和纯虚析构,向上类型转化和向下类型转化)

虚析构和纯虚析构 虚析构virtual ~类名(){}类内声明&#xff0c;类内实现解决问题&#xff1a;通过父类指针指向子类对象释放时候不干净的问题 纯虚析构 写法 virtual ~类名(){}0; 类内声明 类外实现 如果出现了纯虚析构函数&#xff0c;这个类也算是抽象类&#xff0c;不可…

嵌入式开发硬件知识札记

三态逻辑 1. 概念 三态指其输出既可以是一般二值逻辑电路&#xff0c;即正常的高电平&#xff08;逻辑1&#xff09;或低电平&#xff08;逻辑0&#xff09;&#xff0c;又可以保持特有的高阻抗状态。高阻态相当于隔断状态&#xff08;电阻很大&#xff0c;相当于开路&#xff…

《凡人修仙传》中打斗场景(c++多态实现)

我们 要实现打斗场景&#xff0c;第一&#xff0c;我们需要有打斗的双方&#xff0c;一个是英雄&#xff0c;一个是怪物&#xff0c;他们都有自己的属性&#xff0c;比如攻击&#xff0c;防御&#xff0c;血量。其次我们的英雄还会有武器。武器上有一些加成属性&#xff0c;可以…

使用mp4v2将aac音频h264视频数据封装成mp4开发心得

这阵子在捣鼓一个将游戏视频打包成本地可播放文件的模块。开始使用avi作为容器&#xff0c;弄了半天无奈avi对aac的支持实在有限&#xff0c;在播放时音视频时无法完美同步。 关于这点avi文档中有提到&#xff1a; For AAC, one RAW AAC frame usually spans over 1024 samples…

c++模板---1(模板概念,利用模板实现数组排序,函数模板调用规则)

什么叫泛型编程&#xff1f;1. 参数类型化。 2. 模板 模板概念 c提供了函数模板&#xff0c;所谓函数模板&#xff0c;实际上是建立一个通用函数&#xff0c;其函数类型和形参类型不具体制定&#xff0c;用一个虚拟的类型来代表。这个通用函数就成为函数模板。凡是函数体相同…

c++模板--2(模板机制,模板的局限性,类模板,类模板做函数的参数)

函数模板机制结论 编译器并不是把函数模板处理成能狗处理任何类型的函数函数模板通过具体类型产生不同的函数编译器会对函数模板进行两次编译&#xff0c;在声明的地方对模板代码的本身进行编译&#xff0c;在调用的地方对参数替换后代码进行编译在编译器编译阶段&#xff0c;…

arm-linux 交叉编译 mp4v2

2014-09-23 14:44 1901人阅读 评论(0) 收藏 举报 版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 1、下载mp4v2的源代码&#xff08;http://code.google.com/p/mp4v2/downloads/list&#xff09;mp4v2-2.0.0.tar.bz2 2. 进入相应目录 ./configu…

c++模板---3(类模板碰到继承问题,类模板类外实现,类模板与友元函数)

类模板碰到继承问题 基类如果是模板类&#xff0c;必须让子类告诉编译器 基类中的T到底是什么类型 如果不告诉&#xff0c;那么无法分配内存&#xff0c;编译不过 利用参数列表class Child :public Base<int> #include<iostream>using namespace std;template&l…

Linux USB札记

嵌入式linux内核添加USB模块&#xff08;U盘&#xff09;支持 使用menuconfig工具进行配置 1、Device Drivers->SCSI device support->SCSI disk support此选项必须勾选 2、Device Drivers->USB support->Support for Host-side USB 此选项选中后会出现子菜单&…

c++实现任意类型数组类的封装

MyArray.hpp #pragma once #include<iostream> #include<string> using namespace std; template<class T>class MyArray { public://构造explicit MyArray(int capacity) //防止隐式类型转换&#xff0c;防止MyArray arr 10{this->m_Capacity capacity…

Linux内核配置选项 (经典学习)

转载地址http://book.csdn.net/bookfiles/972/10097230254.shtml 2.5 Linux内核配置选项 下面以最新的Linux 2.6.20内核为例&#xff0c;介绍比较常用的一些Linux内核配置选项&#xff0c;其他选项读者可以参考系统提供的帮助信息。 需要说明的是&#xff0c;在内核配置中&am…

深入理解linux系统下proc文件系统内容

另外&#xff0c;可以参考这个http://www.centos.org/docs/5/html/5.1/Deployment_Guide/ch-proc.html 内容摘要&#xff1a;Linux系统上的/proc目录是一种文件系统&#xff0c;即proc文件系统。 Linux系统上的/proc目录是一种文件系统&#xff0c;即proc文件系统。与其它常见…

c++中的异常--1(基本概念, c语言中处理异常,c++中处理异常,异常的基本使用,栈解旋)

异常基本概念 异常处理就是处理程序中的错误&#xff0c;所谓错误是指在程序运行的过程中发生的一些异常事件&#xff08;如&#xff1a;除0退出&#xff0c;数组下标越界&#xff0c;所要读取的文件不存在&#xff0c;空指针&#xff0c;内存不足等等&#xff09; c语言中处…

RGB、YUV和YCbCr

之前对RGB、YUV和YCbCr一直没有清晰的理解和认识&#xff0c;今天打算做一个小结&#xff0c;结合网上的文章谈谈自己的看法&#xff0c;也希望有机会看到这篇文章的人能指点一二&#xff0c;相互交流&#xff0c;共同进步。 首先要说明&#xff0c;上述的RGB、YUV和YCbCr都是人…