首页后端开发ASP.NET【C++】深入了解继承方式基础知识及其与访问限定符的关系

【C++】深入了解继承方式基础知识及其与访问限定符的关系

时间2024-01-31 00:32:03发布访客分类ASP.NET浏览546
导读:收集整理的这篇文章主要介绍了【C++】深入了解继承方式基础知识及其与访问限定符的关系,觉得挺不错的,现在分享给大家,也给大家做个参考。继承方式和访问限定符的关系三种继承方式:公有继承私有继承保护继承关系:若基类的成员函数为私有,则派生类对基...
收集整理的这篇文章主要介绍了【C++】深入了解继承方式基础知识及其与访问限定符的关系,觉得挺不错的,现在分享给大家,也给大家做个参考。继承方式和访问限定符的关系

三种继承方式:

  1. 公有继承

  2. 私有继承

  3. 保护继承

关系:若基类的成员函数为私有,则派生类对基类的私有成员是不可见的,其他的标准为选范围小的为最终访问限定。

保护成员限定符:一些基类成员不想被基类的对象直接访问,但需要在派生类中才能访问,就定义为保护成员。保护成员限定符是因继承才出现的。

理解隐藏

隐藏是指派生类的函数屏蔽了与其同名的基类函数。规则如下:

  1. 如果派生类的函数与基类的函数同名,但是参数不同,此时,不论有无virtual关键字,基类的函数将被隐藏。

  2. 如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字,此时,基类的函数被隐藏。

派生类的默认成员函数

在派生类中如果没有显示定义一下六个默认成员函数,编译系统会默认合成这六个成员函数。

  1. 构造函数

  2. 拷贝构造函数

  3. 析构函数

  4. 赋值操作符重载

  5. 取地址操作符重载

  6. const修饰的取地址操作符重载

#includeiostream>
    using namespace std;
class PErson{
  public:    person(const char* name)      :_name(name)    {
          cout"person()"endl;
    }
        person(const person&
 p){
          cout"person(const person&
     p)"endl;
    }
        person&
     operator=(const person&
 p){
          cout"person&
     operator=(const person&
     p)"endl;
          if(this!=&
p){
            _name=p._name;
      }
          return *this;
    }
    ~person(){
         cout"~person()"endl;
     }
      PRotected:    string _name;
}
    ;
class student:public person{
  public:    student(const char* name,int num)      :person(name)       ,_num(num){
             cout"student()"endl;
       }
        student(const student&
 s)      :person(s)       ,_num(s._num)    {
          cout"student(const student&
     s)"endl;
    }
        student&
     operator=(const student&
 s){
          cout"student&
     operator=(const student&
     p)"endl;
          if(this!=&
s){
            person::operator=(s);
    //必须指定域,否则会死循环        _num=s._num;
      }
          return *this;
    }
    ~student(){
    //析构的时候先清理子类,再清理父类,不需要显示的调用      cout"~student()"endl;
    }
      private:    int _num;
}
    ;
int main(){
      student s1("jack",18);
      student s2(s1);
      student s3("rose",16);
      s1=s3;
}
    

菱形继承

菱形继承存在二义性以及数据冗余问题。

例,下图中继承的数据为两份,各不相同:

解决方法:虚继承

在菱形的第二层添加virtual

例:

相关文章:

C#拾遗之小知识(四):继承

C#基础知识整理:基础知识(2) 类

相关视频:

千锋c语言基础视频教程

以上就是【C++】深入了解继承方式基础知识及其与访问限定符的关系的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

上一篇: 使用C语言怎样清空输入缓冲区?这...下一篇:深入理解C#设计模式之策略模式 角...猜你在找的ASP.NET相关文章 C# 一些面试试题的实例教程2022-05-16.NET 6开发TodoList应用之请求日志组件HttpLogging介绍2022-04-16.NET 6中间件Http Logging使用介绍2022-04-16gojs一些实用的高级用法2022-04-16.NET6开发TodoList应用之实现查询排序2022-04-16.NET6开发TodoList应用之实现数据塑形2022-04-16.NET微服务架构CI/CD自动打包镜像2022-04-16Asp.Net Core 使用Monaco Editor 实现代码编辑器功能2022-04-16.NET微服务架构CI/CD自动构建Jenkins+Gitee2022-04-16.Net Core微服务网关Ocelot集成Consul2022-04-16 其他相关热搜词更多phpjavapython程序员loadpost-format-gallery

若转载请注明出处: 【C++】深入了解继承方式基础知识及其与访问限定符的关系
本文地址: https://pptw.com/jishu/593244.html
深入理解C#设计模式之策略模式 角色具体案例分享 jquery怎样让所有input失效

游客 回复需填写必要信息