精华内容
下载资源
问答
  • 2022-03-08 15:29:07

    习题 11. 4 改例11.3的程序,改为公用继承方式。上机调试程序,使之能正确运行并得到正确结果。对这两种继承方式做分析比较,考虑在什么情况下二者不能互相替换。

    在类外访问时,protected继承的public和protected成员不可被访问,而public继承的可以

    #include <iostream>
    using namespace std;
    
    class Student                       
    {
    public:                                           
    
    protected:                         
        int num;
        string  name;
        char sex;
    };
    
    
    class Student1 : public Student              
    {
    public:
        void get_value_1();
        void display1();
    private:
        int age;
        string addr;
    };
    
    void Student1::get_value_1()
    {
        cout << "请输入学号、姓名、性别、年龄、地址:" << endl;
        cin >> num >> name >> sex;
        cin >> age >> addr;
    }
    void Student1::display1()
    {
        cout << "num: " << num << endl;        
        cout << "name: " << name << endl;       
        cout << "sex: " << sex << endl;         
        cout << "age: " << age << endl;         
        cout << "address: " << addr << endl;    
    }
    
    int main()
    {
        Student1 stud1;                      
        stud1.get_value_1();                
        stud1.display1();                  
        return 0;
    }

    更多相关内容
  • 公用继承

    2019-05-19 23:29:25
    已知一个类Student,作用为用户输入学生的学号,姓名,性别,最后显示屏幕上:[代码如下] class Student { public: void get_value() { cin >> num >> name >> sex; ...

    一.准备知识

      首先我们需要知道以下几个重要的概念:

    1. 基类
    2. 派生类
    3. 公用基类
    4. 公用派生类

    概念引例

    已知一个类Student,作用为用户输入学生的学号,姓名,性别,最后显示在屏幕上:[代码如下]

    class Student
    {
    public:
       void get_value()
       {
       	cin >> num >> name >> sex;
       }
       void display()
       {
       	cout << "num:" << num << endl;
       	cout << "name:" << name << endl;
       	cout << "sex:" << sex << endl;
       }
    private:
       int num;
       string name;
       char sex;
    };
    
    

    但现在我们又有新的需求,我们想要补充一些信息进入类里,为了防止代码的冗长和保持代码隐蔽性,安全性,我们决定在类A外想办法进行信息的补充。
      我们现在想让用户除了输入以上信息之外能够再输入学生的年龄,家庭地址。
      所以我们又新建一个类Student1

    class Student1 :public Student
    {
    public:
    	void get_value_1()
    	{
    		cin >> age >> addr;
    	}
    	void display_1()
    	{
    		cout << "age=" << age << endl;
    		cout << "addr=" << addr << endl;
    	}
    private:
    	int age;
    	string addr;
    };
    

    这时候我们回过来理解刚才给出的概念:

    1. 基类--------------------------------------->Student
    2. 派生类--------------------------------------->Student1

       我们用Student1类的数据来补充Student类的信息时,还要保留

    Student类里的数据,我们把这种保留机制称为继承

      继承方式有两种:publicprivate。我们这里讲到的是公用继

    承,也就是public继承。所以概念理解:

    1. 公用基类--------------------------------------->Student
    2. 公用派生类--------------------------------------->Student1

    二.公用继承的定义

    我们在以上代码中已经提到过,这里直接给出定义的代码:

    class Student1 :public Student
    

    代码的示意:为基类Student定义一个公用的派生类Student1

    反之,我们也可以定义一个私用的派生类,也就是私用继承,如下定义:

    class Student1 :private Student
    

    私用继承后边我们会讲到。

    三.完成代码

    /*================================
    函数功能:利用公有继承输出学生信息
    作者:令狐荣豪
    时间:2019/5/19
    ==================================*/
    #include<iostream>
    #include<string>
    using namespace std;
    class Student
    {
    public:
    	void get_value()
    	{
    		cin >> num >> name >> sex;
    	}
    	void display()
    	{
    		cout << "num:" << num << endl;
    		cout << "name:" << name << endl;
    		cout << "sex:" << sex << endl;
    	}
    private:
    	int num;
    	string name;
    	char sex;
    };
    
    class Student1 :public Student
    {
    public:
    	void get_value_1()
    	{
    		cin >> age >> addr;
    	}
    	void display_1()
    	{
    		cout << "age=" << age << endl;
    		cout << "addr=" << addr << endl;
    	}
    private:
    	int age;
    	string addr;
    };
    int main()
    {
    	Student1 stud;
    	stud.get_value();
    	stud.get_value_1();
    	stud.display();
    	stud.display_1();
    	return 0;
    }
    

    四.输出结果

    在这里插入图片描述

    展开全文
  • 将例5.1的程序片段补充和改写成一个完整、正确的程序,用**公用继承**方式程序中应包括输入数据的函数,程序运行时输入 num, name, sex, age, addr 的值,程序应输出以上5个数据。 ——谭浩强的《C++面向对象...

    题目要求

    将例5.1的程序片段补充和改写成一个完整、正确的程序,用公用继承方式。在程序中应包括输入数据的函数,在程序运行时输入 num, name, sex, age, addr 的值,程序应输出以上5个数据。

    ——谭浩强的《C++面向对象程序设计》第5章习题第1小题

    例5.1的程序片段:

    class Student // 声明基类
    {
    public: // 基类公用成员
    	void get_value() // 输入基类数据的成员函数
    	{
    		cin >> num >> name >> sex;
    	}
    	void display() // 输出基类数据的成员函数
    	{
    		cout << "num: " << num << endl;
    		cout << "name: " << name << endl;
    		cout << "sex: " << sex << endl;
    	}
    private: // 基类私有成员
    	int num;
    	string name;
    	char sex;
    };
    
    class Student1 : public Student // 以 public 方式声明派生类 Student1
    {
    public:
    	void get_value_1() // 输入派生类数据 
    	{
    		cin >> age >> addr;
    	}
    	void display_1() // 输出两个数据成员的值
    	{
    		// cout << "num: " << num << endl;      // 企图引用基类的私有成员,错误
    		// cout << "name: " << name << endl;    // 企图引用基类的私有成员,错误
    		// cout << "sex: " << sex << endl;      // 企图引用基类的私有成员,错误
    		cout << "age: " << age << endl;      // 引用派生类的私有成员
    		cout << "address: " << addr << endl; // 引用派生类的私有成员
    	}   
    private:
    	int age;
    	string addr;
    };
    
    int  main()
    {
    	Student1 stud;      // 定义派生类 Student1 的对象 stud
    	stud.get_value();   // 调用基类的公用成员函数,输入基类两个数据成员的值
    	stud.get_value_1(); // 调用派生类的公用成员函数,输入派生类两个数据成员的值
    	stud.display();     // 调用基类的公用成员函数,输出基类中两个数据成员的值
    	stud.display_1();   // 调用派生类的公用成员函数,输出派生类中两个数据成员的值
    	return 0;
    }
    

    继承与派生

    1. C++的继承机制旨在实现程序或软件的重用。
      所谓继承是在现有类 A 的基础上构建一个新类 B 。
      类 A称为基类或父类,类 B 称作派生类或子类
      子类从父类获得其已有的特性,这种现象称作类的继承;
      从另一个角度看从父类产生子类,又称作类的派生。

    2. 通过单个基类派生子类的声明格式为:

    class 派生类名 : [继承方式] 基类名
    { 派生类新增成员声明 }

    继承方式:public、private、protected。系统缺省为 private。
    例如:现有基类为student,通过单继承构建一个派生类student1,继承方式为 public:

    class Student1 : public Student // 以 public 方式声明派生类 Student1
    
    1. 派生类中的成员包括从基类继承的成员和本类新增的成员。
      继承基类成员体现了同一基类的子类都具有的共性,而新增加的成员体现了子类的个性。
      在声明派生类时增加成员,它体现了派生类对基类功能的扩充。

    公用继承

    在基类的访问属性继承方式在派生类中的访问属性
    private(私有)public(公用)不可访问
    public(公用)public(公用)public(公用)
    protected(保护)public(公用)protected(保护)
    1. 当派生类的继承方式为 public(公有)属性时,在派生类中,基类的公有成员和保护成员在派生类中的访问属性没有变化;即分别作为派生类的公有成员和保护成员,派生类中新增的成员(函数)可以直接访问它们

    例如:

    	void get_value_1() // 输入派生类数据 
    	{
    		get_value(); // 调用基类的公用成员函数,输入3个数据成员的值
    		cin >> age >> addr;
    	}
    

    在派生类 Student1 中的函数 get_value_1 中引用基类 Student 中的函数 get_value,是允许的。

    1. **在派生类外,可以访问公用基类中的公用成员。**基类的私有成员在派生类内外都不可访问。基类的派生成员在派生类中也是受保护的,在派生类内可以访问,但在派生类外不可访问。

    2. 基类的私有成员在派生类中没有称为派生类的私有成员,它仍然是基类的私有成员,只有基类的成员函数可以引用它。派生类的成员不能直接访问基类的私有成员。保护私有成员是一条重要的原则。

    如例5-1程序中:

    	void display_1() 
    	{
    		// cout << "num: " << num << endl;      // 企图引用基类的私有成员,错误
    		// cout << "name: " << name << endl;    // 企图引用基类的私有成员,错误
    		// cout << "sex: " << sex << endl;      // 企图引用基类的私有成员,错误
    		cout << "age: " << age << endl;         // 引用派生类的私有成员
    		cout << "address: " << addr << endl;    // 引用派生类的私有成员
    	}   
    

    在派生类 Student1 中的函数 display_1 中引用基类 Student 的私有数据成员 num, name, sex,是不允许的。

    1. 如果想要引用公用基类的私有成员,有两种方法:
      (1)通过基类的公有成员函数访问基类的私有数据成员。

    如例5-1程序中:

    	stud.get_value();   // 调用基类的公用成员函数,输入基类两个数据成员的值
    	stud.get_value_1(); // 调用派生类的公用成员函数,输入派生类两个数据成员的值
    	stud.display();     // 调用基类的公用成员函数,输出基类中两个数据成员的值
    	stud.display_1();   // 调用派生类的公用成员函数,输出派生类中两个数据成员的值
    

    (2)在派生类的成员函数中调用基类的公有成员函数,访问基类的私有数据成员。

    例如:

    	void display_1() 
    	{
    		display(); // 调用基类的公用成员函数,输出两个数据成员的值
    		cout << "age: " << age << endl;      // 引用派生类的私有成员
    		cout << "address: " << addr << endl; // 引用派生类的私有成员
    	}   
    

    补充改写后的程序

    /*
    *************************************************************************
    @file:    main.cpp
    @date:   2020.11.25
    @author: Xiaoxiao
    @brief:   公用继承方式输入和输出 num,name,sex,age,addr
    @blog:    https://blog.csdn.net/weixin_43470383/article/details/110138820
    *************************************************************************
    */
    #include <iostream>
    using namespace std;
    class Student // 声明基类
    {
    public: // 基类公用成员
    	void get_value() // 输入基类数据的成员函数
    	{
    		cin >> num >> name >> sex;
    	}
    	void display() // 输出基类数据的成员函数
    	{
    		cout << "num: " << num << endl;
    		cout << "name: " << name << endl;
    		cout << "sex: " << sex << endl;
    	}
    private: // 基类私有成员
    	int num;
    	char name[10];
    	char sex;
    };
    
    class Student1 : public Student // 以 public 方式声明派生类 Student1
    {
    public:
    	void get_value_1() // 输入派生类数据 
    	{
    		get_value(); // 调用基类的公用成员函数,输入3个数据成员的值
    		cin >> age >> addr;
    	}
    	void display_1() 
    	{
    		display(); // 调用基类的公用成员函数,输出两个数据成员的值
    		cout << "age: " << age << endl;      // 引用派生类的私有成员
    		cout << "address: " << addr << endl; // 引用派生类的私有成员
    	}   
    private:
    	int age;
    	char addr[30];
    };
    
    int  main()
    {
    	Student1 stud1;      // 定义派生类 Student1 的对象 stud1
    	stud1.get_value_1(); // 调用派生类的公用成员函数,输入派生类两个数据成员的值
    	stud1.display_1();   // 调用派生类的公用成员函数,输出派生类中两个数据成员的值
    	system("pause");
    	return 0;
    }
    

    运行结果

    运行结果
    输入:
    8 Xiaoxiao m 20 Guangzhou

    输出:
    num: 8
    name: Xiaoxiao
    sex: m
    age: 20
    address: Guangzhou

    展开全文
  • C++ 公用继承

    2017-08-15 23:31:07
    C++的继承方式分为 公用继承,私有继承,保护继承 建立一个派生类时,将基类的继承方式指定为public,则为公用继承。 1 公用继承时,基类的公用成员和保护成员仍然为公用成员和保护成员的属性。 2 基类的私有...

    C++的继承方式分为 公用继承,私有继承,保护继承

    建立一个派生类时,将基类的继承方式指定为public,则为公用继承。


    1 公用继承时,基类的公用成员和保护成员仍然为公用成员和保护成员的属性。

    2 基类的私有成员,仍为基类的私有成员,只能用基类的成员函数去引用它,所以派生类的成员函数不能引用基类的私有成员。

    访问属性
    基类的访问属性继承方式
    在派生类中的访问属性
    private
    公用继承不可访问
    public公用继承public
    protected公用继承protected

    附上课本上的小例子,切勿眼高手低

    #include <iostream>
    #include <string.h>
    using namespace std;
    
    class Student //声明基类
    {
        public: // 公用
            void get_value()
            {
                cin>>num>>name>>sex;
            }
            void display()
            {
                cout<<"num: "<<num<<endl;
                cout<<"name: "<<name<<endl;
                cout<<"sex: "<<sex<<endl;
            }
          private:  //私有
            int num;
            string name;
            char sex;
        
    };
    
    class Student1:public Student  //声明派生类
    {
        public:
            void get_value_1()
            {
                get_value(); //公用继承,所以可以调用基类的公用函数
                cin>>age>>addr;
            }
            void display_1()
            {
                display(); //公用继承,所以可以调用基类的公用函数
                cout<<"age= "<<age<<endl;
                cout<<"addr= "<<addr<<endl;
            }
         private:
            int age;
            string addr;
    };
    
    int main()
    {
        Student1 stud;
        stud.get_value_1();
        stud.display_1();
        return 0;
    }
    
    
    虽然派生类的成员函数不能访问基类的私有成员,但是可以通过访问基类的公用成员函数,而进一步的输出基类私有成员的值,如display_1()函数调用display函数。

    展开全文
  • ####习题 11.1 将例11.1的程序片断补充和改写成一个完整、正确的程序,用公用继承方式程序中应包括输入数据的函数,程序运行时输入num,name,sex,age,addr的值,程序应输出以上5个数据的值。 代码块: #...
  • 派生类继承了基类的全部数据成员和除了构造函数、析构函数之外的全部函数成员,但是,这些成员的访问属性派生过程中是可以...类的继承方式有:公有继承、私有继承、保护继承当类的继承方式为公有继承时:基类的p...
  • 声明一个派生类时将基类的继承方式指定为private的,称为私有继承,用私有继承方式建立的派生类称为私有派生类(private derived class ), 其基类称为私有基类(private base class )。 私有基类的公用成员和保护...
  • #include<iostream> #include<string> using namespace std; class student {public: void get_value() { cin>>num>>name>>sex; } void display() ..."num:"&...
  • c++的继承控制中,有三种不同的控制权限,分别是public、protected和private。定义派生类时,若不显示加上这三个关键字,就会使用默认的方式,用struct定义的类是默认public继承,class定义的类是默认private继承...
  • 这种情况,基类被看作抽象类。 尽管ECMAScript并没有像其他语言那样严格地定义抽象类,但有时它的确会创建一些不允许使用的类。通常,我们称这种类为抽象类。 创建的子类将继承超类的所有属性和方法,包括构造...
  • JS中想要达到继承公用成员的目的,需要采取一系列措施。JS属于原型式继承,得益于这种灵活性,我们既可以使用标准的基于类的继承,也可以使用更微妙一些的原型式继承JS中应该要明确一点,一切继承都是通过...
  • 继承对于功能的设计和抽象是非常有用的,而且对于类似的对象增加新功能就无须重新再写这些公用的功能。 Note: 除非使用了自动加载,否则一个类必须使用之前被定义。如果一个类扩展了另一个,则父类必须子类之前...
  • 说说C++多重继承

    2021-01-20 03:40:35
    尽管大多数应用程序都使用单个基类的公用继承,但有些时候单继承是不够用的,因为可能无法为问题域建模或对模型带来不必要的复杂性。这种情况,多重继承可以更直接地为应用程序建模。  一、基本概念  多重...
  • public继承 派生类可以访问基类的public、protected成员,不可以访问基类的private成员; 派生类对象可以访问基类的public成员,不可以访问基类的protected、private成员。 protected继承 派生类可以访问基类的...
  • 当多个类公用很多方法的时候可以将公用方法部分抽取出来,需要的类做相关继承。 例子: 代码如下: class A ”it was a “ C.new.a #=>”it was a “ 2、抽象类 当多个类要继承一个类时,用第一种方法,会遇到一个...
  • 与它们不同,javascript中要想达到传承公用成员的目的,需要采取一系列措施。更有甚者,javascript属于使用原型式继承的少数语言之一。利益于这种语言的灵活性,你既可使用标准的基于类的继承,也可使用更微妙一些...
  • #include using namespace std; class Student //声明基类 {public: //基类公用成员 void get_value(); void display( ); protected :
  • javascript中类的继承方式解析

    千次阅读 2022-03-16 14:51:35
    经常能搜到一些总结js继承方式的文章,原型链继承,构造函数继承,组合继承,寄生继承,组合寄生继承, 新手看完之后肯定是越看越懵逼,这些文章写到最后一定是推荐使用组合寄生继承,因为只有这种方式是最完美的。...
  • 比如:AdminBase 为应用后台的公用的控制器,每一个应用后台控制器里面都来继承公共的AdminBase ,但是同时要确保AdminBase 也是继承CI_Controller的。 前台HomeBase也是同样的道理。 具体实现很简单,只要...
  • 输入输出--公用继承

    千次阅读 2014-05-22 15:14:46
    [Submit][Status][Web Board] Description ...Student类含有私有数据成员:num,name,sex...采用公用继承方式实现类Student1,增加数据成员:age,addr,成员函数:get_value_1()和display_1()。程序运行时输入num,n
  • 但有些情况,rootScope就是我们的controller,不可能将大量的公用属性方法写到rootScope里去。 比如说有多个类似的页面,都有面包屑,搜索栏,工具栏,表格等元素,面包屑表格这种元素考虑做成directive,那么...
  • 继承和派生复习

    2021-01-20 22:06:48
    继承和派生练习关于保护继承下列说法错误的是保护继承的特点是基类的所有公用成员和保护成员都成为派生类的保护成员派生类对象不能访问基类中的任何成员派生类的对象可以访问基类的公有成员保护继承的派生类和私有继
  • 实际应用中,你将用 Django 模板系统来创建整个 HTML 页面。 这就带来一个常见的 Web ...本质上来说,模板继承就是先构造一个基础框架模板,而后其子模板中对它所包含站点公用部分和定义块进行重载。 让我们通过
  • 将例5.2的程序片段补充和改写成一个完整、正确的程序,用私有继承方式程序中应包括输入数据的函数,程序运行时输入 num, name, sex, age, addr 的值,程序应输出以上5个数据。 ——谭浩强的《C++面向对象程序...
  • 基类的成员派生类中的继承情况

    千次阅读 2019-03-01 16:05:43
    公有继承的情况,基类的public,protect成员的属性派生类中保持不变,private成员的属性变为不可访问即派生类只能通过基类的成员函数访问基类的私有成员。 私有继承的情况,基类的public,...
  • 文件夹保管人 Linux公用文件夹保管人 免费软件:GNU通用公共许可证v3 文档: : 。 为什么? 家用计算机运行Fedora,... 该软件包旨在解决的关键问题是,从一个位置移动到另一位置的文件不会继承常用文件夹中的适当权
  • 通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。 我们vue项目中使用混入将公有代码提出来,混入到每个需要的组件中,让我们的代码更简洁 ...
  • 习题 11.3 将例11.3 的程序修改、补充,写成一个完整、正确的程序,用保护继承方式程序中应包括输入数据的函数。 代码块: #include &lt;iostream&gt; #include &lt;string&gt; using namespace...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 52,138
精华内容 20,855
关键字:

在公用继承方式下