热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

类别继承程序代码再用

c继承机制:代码#includeusingnamespacestd;classBase{private:intpri_att;voidpri_show(){co

c++继承机制:

代码

#include
using namespace std;
class Base
{
   private:
   int pri_att;
   void pri_show()
   {
     cout<<"Base ::pri_show() is called!"<    }
   protected:
   int pro_stt;
   void pro_show()
   {
   cout<<"Base::pro_show() is called!"<   }
   public:
    Base()
   :pri_att(1);pro_att(2);pub_att(3){}
   int pub_att;
  void pub_show()
  {
   cout<<"Base::pub_show() is called !"<  }
}

class Derived:public Base &#xff0f;&#xff0f;定义&#xff21;&#xff3f;&#xff24;&#xff45;&#xff52;&#xff49;&#xff56;&#xff45;&#xff44;以&#xff50;&#xff55;&#xff42;&#xff4c;&#xff49;&#xff43;继承&#xff22;&#xff41;&#xff53;&#xff45;&#xff0c;
{  public: &#xff0f;&#xff0f;
  void call_fun() &#xff0f;&#xff0f;
  void show() &#xff0f;&#xff0f;
}; &#xff0f;&#xff0f;

&#xff22;&#xff41;&#xff53;&#xff45;类别的成员&#xff22;&#xff41;&#xff53;&#xff45;类别的存取权限&#xff24;&#xff45;&#xff52;&#xff49;&#xff56;&#xff45;&#xff44;类别&#xff50;&#xff55;&#xff42;&#xff4c;&#xff49;&#xff43;继承后存取权限的等级
&#xff50;&#xff55;&#xff42;&#xff3f;&#xff41;&#xff54;&#xff54;&#xff50;&#xff55;&#xff42;&#xff4c;&#xff49;&#xff43;&#xff50;&#xff55;&#xff42;&#xff4c;&#xff49;&#xff43;
&#xff50;&#xff52;&#xff4f;&#xff3f;&#xff41;&#xff54;&#xff54;&#xff50;&#xff52;&#xff4f;&#xff54;&#xff45;&#xff43;&#xff54;&#xff45;&#xff44;&#xff50;&#xff52;&#xff4f;&#xff54;&#xff45;&#xff43;&#xff54;&#xff45;&#xff44;
&#xff50;&#xff52;&#xff49;&#xff3f;&#xff41;&#xff54;&#xff54;&#xff50;&#xff52;&#xff49;&#xff56;&#xff41;&#xff54;&#xff45;隐藏
&#xff50;&#xff55;&#xff42;&#xff3f;&#xff53;&#xff48;&#xff4f;&#xff57;&#xff50;&#xff55;&#xff42;&#xff4c;&#xff49;&#xff43;&#xff50;&#xff55;&#xff42;&#xff4c;&#xff49;&#xff43;
&#xff50;&#xff52;&#xff4f;&#xff3f;&#xff53;&#xff48;&#xff4f;&#xff57;&#xff50;&#xff52;&#xff4f;&#xff54;&#xff45;&#xff43;&#xff54;&#xff45;&#xff44;&#xff50;&#xff52;&#xff4f;&#xff54;&#xff45;&#xff43;&#xff54;
&#xff50;&#xff52;&#xff49;&#xff3f;&#xff53;&#xff48;&#xff4f;&#xff57;&#xff50;&#xff54;&#xff49;&#xff56;&#xff41;&#xff54;&#xff45;隐藏

 

 

void Derived::call_fun() &#xff0f;&#xff0f;
{
cout<cout<<"Derived ::call_fun is called"<pub_show();
pro_show();

&#xff0f;&#xff0f;&#xff50;&#xff52;&#xff49;&#xff3f;&#xff53;&#xff48;&#xff4f;&#xff57;&#xff08;&#xff09;&#xff1b;
}
void Deeived::show()
{
cout<cout<<"Derived ::show() is called!"<cout<<"Base::pub_att&#61;"<cout<<"Base::pro_att&#61;"<&#xff0f;&#xff0f;cout<<"Base::pri_att&#61;"<
}

int main()
{
  Derived A_Derived;
  cout<<"Accessing Derived&#39;s data members"
     <<"inherited form Base..."<  cout<<"Derived::pub_att&#61;"<  &#xff0f;&#xff0f;cout<<"Derived::pro_att&#61;"<  cout<  cout<<"Call Derived&#39;s members funcitons"<<"inherited form Base.."<  A_Derived.pub_show();
  &#xff0f;&#xff0f;A_Derived.pro_show();
  &#xff0f;&#xff0f;A_Derived.pri_show();

  A_Derived.call_show();
  A_Derived.show();
return 0;
}

[root&#64;localhost code]# g&#43;&#43; public_inh.cpp
public_inh.cpp:19: function body for constructor missing
public_inh.cpp:19: invalid data member initialization
public_inh.cpp:19: (use &#96;&#61;&#39; to initialize static data members)
public_inh.cpp:19: ISO C&#43;&#43; forbids declaration of &#96;pro_att&#39; with no type
public_inh.cpp:19: ISO C&#43;&#43; forbids declaration of &#96;pub_att&#39; with no type
public_inh.cpp:19: syntax error before &#96;{&#39; token
public_inh.cpp:19: missing &#39;;&#39; before right brace
public_inh.cpp:20: semicolon missing after declaration of &#96;Base&#39;
public_inh.cpp: In constructor &#96;Base::Base()&#39;:
public_inh.cpp:19: parse error before &#96;int&#39;
public_inh.cpp: At global scope:
public_inh.cpp:20: extraneous &#96;int&#39; ignored
public_inh.cpp:20: conflicting types for &#96;Base pub_att&#39;
public_inh.cpp:19: previous declaration as &#96;int pub_att&#39;
public_inh.cpp:25: parse error before &#96;}&#39; token
public_inh.cpp:29: parse error before &#96;void&#39;
public_inh.cpp:30: missing &#39;;&#39; before right brace
public_inh.cpp:38: syntax error before &#96;::&#39; token
public_inh.cpp:41: syntax error before &#96;<<&#39; token
public_inh.cpp:42: syntax error before &#96;<<&#39; token
public_inh.cpp:43: syntax error before &#96;<<&#39; token
public_inh.cpp:44: syntax error before &#96;<<&#39; token
public_inh.cpp: In function &#96;int main()&#39;:
public_inh.cpp:53: &#96;class Derived&#39; has no member named &#96;pub_att&#39;
public_inh.cpp:58: no matching function for call to &#96;Derived::pub_show()&#39;
public_inh.cpp:14: &#96;void Base::pro_show()&#39; is protected
public_inh.cpp:59: within this context
public_inh.cpp:8: &#96;void Base::pri_show()&#39; is private
public_inh.cpp:60: within this context
public_inh.cpp:61: no matching function for call to &#96;Derived::call_show()&#39;
public_inh.cpp:62: no matching function for call to &#96;Derived::show()&#39;

根据以上报错&#xff0c;

一一分析排查&#xff1a;

:pri_att(1),pro_att(2),pub_att(3){}

主要还是大部分在细节上&#xff0c;非技术性错误&#xff0e;

经过修改在编译&#xff1a;

public_inh.cpp: In constructor &#96;Base::Base()&#39;:
public_inh.cpp:19: class &#96;Base&#39; does not have any field named &#96;pro_att&#39;
public_inh.cpp: In member function &#96;void Derived::show()&#39;:
public_inh.cpp:43: &#96;pro_att&#39; undeclared (first use this function)
public_inh.cpp:43: (Each undeclared identifier is reported only once for each
   function it appears in.)
public_inh.cpp:6: &#96;int Base::pri_att&#39; is private
public_inh.cpp:44: within this context
public_inh.cpp: In function &#96;int main()&#39;:
public_inh.cpp:54: &#96;class Derived&#39; has no member named &#96;pro_att&#39;
public_inh.cpp:14: &#96;void Base::pro_show()&#39; is protected
public_inh.cpp:59: within this context
public_inh.cpp:8: &#96;void Base::pri_show()&#39; is private
public_inh.cpp:60: within this context
public_inh.cpp:61: no matching function for call to &#96;Derived::call_show()&#39;

再修改&#xff0c;编译&#xff1a;

[root&#64;localhost code]#  g&#43;&#43; public_inh.cpp
public_inh.cpp: In member function &#96;void Derived::show()&#39;:
public_inh.cpp:6: &#96;int Base::pri_att&#39; is private
public_inh.cpp:44: within this context
public_inh.cpp: In function &#96;int main()&#39;:
public_inh.cpp:12: &#96;int Base::pro_att&#39; is protected
public_inh.cpp:54: within this context
public_inh.cpp:14: &#96;void Base::pro_show()&#39; is protected
public_inh.cpp:59: within this context
public_inh.cpp:8: &#96;void Base::pri_show()&#39; is private
public_inh.cpp:60: within this context

这就很好证实了在&#xff50;&#xff55;&#xff42;&#xff4c;&#xff49;&#xff43;继承中&#xff50;&#xff52;&#xff49;&#xff3f;&#xff41;&#xff54;&#xff54;的不可见性

再次编译

出错情况&#xff1a;

[root&#64;localhost code]# g&#43;&#43; public_inh.cpp
public_inh.cpp: In function &#96;int main()&#39;:
public_inh.cpp:12: &#96;int Base::pro_att&#39; is protected
public_inh.cpp:54: within this context

 

[root&#64;localhost code]# g&#43;&#43; public_inh.cpp
[root&#64;localhost code]# g&#43;&#43; -o public_inh.cpp public_inh.out
g&#43;&#43;: public_inh.out: No such file or directory
g&#43;&#43;: no input files

但是&#xff1a;

[root&#64;localhost code]# g&#43;&#43;  public_inh.cpp -o public_inh.out 成功编译
[root&#64;localhost code]#

结果如下&#xff1a;

[root&#64;localhost code]# g&#43;&#43;  public_inh.cpp -o public_inh.out
[root&#64;localhost code]# ./public_inh.out
Accessing Derived&#39;s data membersinherited form Base...
Derived::pub_att&#61;3
Call Derived&#39;s members funcitonsinherited form Base..
Base::pub_show() is called !
Derived ::call_fun is called
Base::pub_show() is called !
Base::pro_show() is called!
Derived ::show() is called!
Base::pub_att&#61;3
Base::pro_att&#61;2

本程序测试的特点&#xff1a;

&#xff22;&#xff41;&#xff53;&#xff45; 类别成员&#xff22;&#xff41;&#xff53;&#xff45;类别存取权限的等级&#xff24;&#xff45;&#xff52;&#xff49;&#xff56;&#xff45;类别&#xff50;&#xff55;&#xff42;&#xff4c;&#xff49;&#xff43;继承后存取权限的等级在类别的外程序可否通过&#xff24;&#xff45;&#xff52;&#xff49;&#xff56;&#xff45;&#xff44;类别的对象存取
&#xff50;&#xff55;&#xff42;&#xff3f;&#xff41;&#xff54;&#xff54;   
&#xff50;&#xff52;&#xff4f;&#xff3f;&#xff41;&#xff54;&#xff54;   
&#xff50;&#xff52;&#xff49;&#xff3f;&#xff41;&#xff54;&#xff54;   
&#xff50;&#xff55;&#xff42;&#xff3f;&#xff53;&#xff48;&#xff4f;&#xff57;   
&#xff50;&#xff52;&#xff4f;&#xff3f;&#xff53;&#xff48;&#xff4f;&#xff57;   
    

 

 

代码&#xff1a;

#include
#include
using namespace std;
class library_object
{
  protected:
    char name[30];
    long index;
  public:
    void set_data(const char *i_name)
     {
       strcpy(name,i_name);
       index &#61;1;
      }
};
class Book :public library_object
{
  private:
  bool on_shelf;
  public :
  void show_data()
{
  cout<<"name:"<

  cout<<"index:"<  if(on_shelf&#61;&#61;true)
     cout<<"on shelf"<  else
     cout<<"not on shelf "<}
};
class Reader :public library_object
{
  public :
   void show_data()
    {
     cout<<"name:"<     cout<<"index:"<    }
};
int main()
{
  Reader A_Reader ;
  Book  A_Book;
  A_Reader.set_data("Jorn");
  A_Reader.show_data();
  A_Book.set_data("the C&#43;&#43; Bible");

A_Book.show-data();
return 0;
}

[root&#64;localhost code]# g&#43;&#43; inheritance.cpp
inheritance.cpp: In function &#96;int main()&#39;:
inheritance.cpp:47: &#96;class Book&#39; has no member named &#96;show&#39;
inheritance.cpp:47: &#96;data&#39; undeclared (first use this function)
inheritance.cpp:47: (Each undeclared identifier is reported only once for each
   function it appears in.)

 

显然是一个小错&#xff1a;

[root&#64;localhost code]# g&#43;&#43; inheritance.cpp -o inheritance.out
[root&#64;localhost code]# ./inheritance.out
name:Jornindex:1
name:the C&#43;&#43; Bibleindex:1not on shelf
[root&#64;localhost code]#

程序分析&#xff1a;

 

 

 

 

 

 

 

 

 

&#xff50;&#xff52;&#xff41;&#xff56;&#xff49;&#xff54;&#xff45;继承代码&#xff1b;

#include
using namespace std;
class Base
{
  private: int pri_att;
           void pri_show()
           { cout<<"Base::pri_show() is called!"<  protected: int pro_att;
              void pro_show()
           { cout<<"Base::pro_show() is called!"<   public : int pub_att;
              void pub_show()
           { cout<<"Base::pub_show() is called!"<           Base()
           :pri_att&#61;1;pro_att&#61;1;pub-att&#61;3;
}
class Derived:private Base
{
public :
   void call_fun();
   void show();
};
void Derived ::call_fun()

{
cout<cout<cout<cout<cout<<"Derived ::call_fun is called!"<pub_show();
pro_show();
// pri_show();
}
void Derived::show()
{
  cout<cout<<"Derived ::show() is called "<  cout<  cout<  cout<<"Base::pub_att&#61;"<  cout<<"Base::pro_att&#61;"<//  cout<<"Base::pri_att&#61;"<}
int main()
{
return 0;

&#xff5d;

出错如下:

[root&#64;localhost code]# g&#43;&#43; private_inh.cpp
private_inh.cpp:15: function body for constructor missing
private_inh.cpp:15: ISO C&#43;&#43; forbids declaration of &#96;pro_att&#39; with no type
private_inh.cpp:15: ISO C&#43;&#43; forbids initialization of member &#96;pro_att&#39;
private_inh.cpp:15: making &#96;pro_att&#39; static
private_inh.cpp:15: ISO C&#43;&#43; forbids in-class initialization of non-const static
   member &#96;pro_att&#39;
private_inh.cpp:15: declaration of &#96;int Base::pro_att&#39;
private_inh.cpp:8: conflicts with previous declaration &#96;int Base::pro_att&#39;
private_inh.cpp:15: syntax error before &#96;-&#39; token
private_inh.cpp:15: duplicate member &#96;Base::pro_att&#39;
private_inh.cpp:17: semicolon missing after declaration of &#96;Base&#39;
private_inh.cpp: In constructor &#96;Base::Base()&#39;:
private_inh.cpp:15: parse error before &#96;:&#39; token
private_inh.cpp: At global scope:
private_inh.cpp:22: multiple types in one declaration
private_inh.cpp: In member function &#96;void Derived::show()&#39;:
private_inh.cpp:38: parse error before &#96;.&#39; token
private_inh.cpp:39: parse error before &#96;.&#39; token
private_inh.cpp: At global scope:
private_inh.cpp:50: parse error before &#96;}&#39; token

修改之后;

[root&#64;localhost code]# g&#43;&#43; private_inh.cpp
private_inh.cpp:17: semicolon missing after declaration of &#96;Base&#39;
private_inh.cpp:22: multiple types in one declaration
private_inh.cpp: In member function &#96;void Derived::show()&#39;:
private_inh.cpp:38: parse error before &#96;.&#39; token
private_inh.cpp:39: parse error before &#96;.&#39; token

 

编译出错&#xff1a;

: &#96;Second_Derived Second_Derived::call_fun()&#39; and &#96;void
   Second_Derived::call_fun()&#39; cannot be overloaded
private_inh.cpp:53: semicolon missing after declaration of &#96;class
   Second_Derived&#39;
private_inh.cpp: In member function &#96;void Second_Derived::show()&#39;:
private_inh.cpp:69: parse error before &#96;{&#39; token
private_inh.cpp:74: &#96;A_Dervied&#39; undeclared (first use this function)
private_inh.cpp:74: (Each undeclared identifier is reported only once for each
   function it appears in.)
private_inh.cpp:81: &#96;A_Derived&#39; undeclared (first use this function)
private_inh.cpp:87: return-statement with a value, in function declared with a
   void return type
[root&#64;localhost code]#


转载于:https://www.cnblogs.com/fleetwgx/archive/2009/04/30/1446632.html


推荐阅读
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 题目描述:给定n个半开区间[a, b),要求使用两个互不重叠的记录器,求最多可以记录多少个区间。解决方案采用贪心算法,通过排序和遍历实现最优解。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • C++: 实现基于类的四面体体积计算
    本文介绍如何使用C++编程语言,通过定义类和方法来计算由四个三维坐标点构成的四面体体积。文中详细解释了四面体体积的数学公式,并提供了两种不同的实现方式。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • ImmutableX Poised to Pioneer Web3 Gaming Revolution
    ImmutableX is set to spearhead the evolution of Web3 gaming, with its innovative technologies and strategic partnerships driving significant advancements in the industry. ... [详细]
author-avatar
翔英建辉千慧
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有