草庐IT

继承权

全部标签

Java面向对象 - 封装、继承和多态

目录第1关:什么是封装,如何使用封装第2关:什么是继承,怎样使用继承第3关:super关键字的使用第4关:方法的重写与重载第5关:抽象类第6关:final关键字的理解与使用第7关:接口第8关:什么是多态,怎么使用多态lys:Java_Educoder第1关:什么是封装,如何使用封装packagecase1;publicclassTestPersonDemo{ publicstaticvoidmain(String[]args){ /*********begin*********/ //声明并实例化一Person对象pPersonp=newPerson(); //给p中的属性赋值p.set

c++ - 无法访问 vc++10 中的模板私有(private)继承

以下代码使用GCC4.4.6和Comeau4.3.10编译。#includestructA{intname;};templatestructC:T{usingT::name;};structB:privateA{friendstructC;};intmain(){Co;o.name=0;}它在VC++10中给出以下错误:main.cpp(4):errorC2877:'A::name'isnotaccessiblefrom'A'main.cpp(10):errorC2247:'A::name'notaccessiblebecause'B'uses'private'toinheritfro

c++ - 具有可变参数模板的递归继承和继承参数问题

如果我像下面的例子那样使用继承链,我可以毫无问题地从最深的基础使用变量:classA{public:intx;};classB:publicA{};classC:publicB{public:voidDo(){cout如果我对递归可变参数模板类执行相同的操作,我将无法访问我的变量。知道如何访问变量以及为什么看不到我的变量吗?templateclassExample;templateclassExample:publicExample{};templateclassExample{public:intx;};templateclassLast:publicExample{voidDo()

C++虚拟继承初始化列表

在下面的代码中:classA{public:intx;A(intx):x(x){}};classB:publicvirtualA{public:B(intx):A(x){}};classC:publicvirtualA{public:C(intx):A(x){}};classD:publicB,publicC{public:D(intx):B(x++),C(x++),A(x++){}};两个问题:为什么我需要添加A(...)在D的初始化列表中?D(intx):B(x++),C(x++),A(x++){}和D(intx):A(x++),B(x++),C(x++){}cout的结果相同,为

c++ - 为什么要在私有(private)继承下覆盖?

classBase{public:virtualvoidf(){}};classDerived:privateBase{public:voidf()override{}};我的问题是这样的覆盖有什么用吗?私有(private)继承意味着您不能将Derived存储在Base指针中,因此永远不需要将f动态分派(dispatch)到正确的类型。 最佳答案 仅举一个例子:Derived::f1()的一个函数可以调用Base::f2()的一个(公共(public)或protected)函数,这反过来可以调用f()。在这种情况下,需要动态调度。

c++ - 当重载具有多重继承的函数时,GCC 说调用它是不明确的,但 Clang 和 MSVC 没有

我正在使用这个变体库:https://github.com/cbeck88/strict-variant.它提供了一个类似于std::variant和boost::variant的类。鉴于此struct:structS{explicitS(double){}};我想这样做:strict_variant::variantv=2.0;这适用于Clang5.0.1和MSVC19.12.25831.00,但无法使用GCC7.2.1进行编译。我查看了库的代码并将问题简化为:#includestructS{constexprS(){}constexprexplicitS(double){}};te

java(继承+封装+多态)编程:定义一个人类(Person),包括属性:姓名、性别、年龄、国籍;包括的方法:吃饭、睡觉,工作

(继承+封装)编程:定义一个人类(Person),包括属性:姓名、性别、年龄、国籍;包括的方法:吃饭、睡觉,工作(1)根据人类,定义一个学生子类,增加属性:学校、学号;重写工作方法(实现内容为学习)(2)根据人类,定义一个工人类,增加属性:单位、工龄;重写工作方法(3)根据学生类,定义一个学生干部类(StudentLeader),增加属性:职务;增加方法:开会(4)定义一个测试类,分别创建上述3类具体人物的对象并将信息打印在控制台上.publicclassPerson{privateStringname;privateStringsex;privateintage;privateStringn

c++ - 虚拟继承构造函数选择

为什么打印20000?代码在继承序列中一直显式调用特定的基础构造函数,但忽略指定的构造函数并改用默认构造函数。#includestructCar{Car():price(20000){}Car(doubleb):price(b*1.1){}doubleprice;};structToyota:publicvirtualCar{Toyota(doubleb):Car(b){}};structPrius:publicToyota{Prius(doubleb):Toyota(b){}};intmain(intargc,char**argv){Priusp(30000);std::cout

c++ - 多重继承模板类

classmessageA{};classmessageB{};templateclassqueue{public:virtual~queue(){}voidsubmit(T&x){}};classA:publicqueue,publicqueue{};intmain(){Aaa;aa.submit(messageA());aa.submit(messageB());}我的第一个想法是,上面的代码应该没问题,因为类A将包含2个重载的提交函数,它们将接受messageA和messageB对象。但是,编译器给我以下错误:请问为什么会有歧义?不是很明显,对于第一次提交调用,我想调用messa

c++ - 继承带有默认参数的构造函数?

C++Primer(第5版)第629页指出:如果基类构造函数有默认参数,则这些参数不会被继承。我自己试过了,在我看来,编译器生成的派生构造函数似乎也具有与基本构造函数相同的默认参数。这里有一个小测试:#includestructBase{Base()=default;Base(intx_,inty_=88,intz_=99):x(x_),y(y_),z(z_){}virtualvoiddebug()const{std::cout(您可以在此处运行-http://coliru.stacked-crooked.com/a/26cbb85757c1f021)那么我们是否也继承了继承构造函数的