草庐IT

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

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

c++ - 非多态类型上的 Dynamic_cast

我能理解为什么dynamic_cast在这种情况下有效:#includestructA{virtual~A()=default;};structB{virtual~B()=default;};structC:A,B{};voidf(constA&a){if(autop=dynamic_cast(&a))std::cout但是为什么如果你从B中删除多态性它仍然有效:#includestructA{virtual~A()=default;};structB{};structC:A,B{};voidf(constA&a){if(autop=dynamic_cast(&a))std::cout

c++ - 具有派生成员函数指针的多态性?

(我看到之前有人在SO上提出过类似的问题,但我看到的问题似乎并没有完全触及我的用例。特别是,我想知道我的编译失败是错误的结果,或者是我尝试的结果是verboten。)背景我希望实现委托(delegate)模式,用于事件处理。我认为也许满足我需求的最佳方法是成员函数指针映射,由std::string索引(代表事件类型。)我开始尝试使用std::function来完成此操作,但遇到了一些问题,然后决定仅使用原始MFP进行尝试。(我仍然愿意考虑std::function,我会接受一个答案,该答案显示了如何使用该方法在下面完成我的确切需求。但我仍然想知道有什么问题我目前的方法。)我能够通过一个

c++ - GoF 装饰器模式在 C++ 中使用静态多态性(模板)

装饰器模式是一种众所周知的使用模式,用于扩展对象的功能而不影响同一类的其他对象的功能。我如何使用这种模式来减少涉及的继承(使用模板)? 最佳答案 基本上,来自多态装饰器的抽象接口(interface)变成了一个隐式定义的概念,您可以嵌套类型。例如:structBasicCoffee{voidprint(){std::coutstructCreamDecorator{CreamDecorator(Tx):mNested(x){}voidprint(){mNested.print();std::coutstructSugarDecora

c++ - std::optional 和多态性

我在许多关于StackOverflow的帖子中读到,当使用指针(用于参数或返回值)并且允许使用nullptr(使其成为可选)时,通常最好使用std::optional代替。但是如果指针指向多态类型呢?最好使用std::optional还是指针? 最佳答案 optional不适用于多态类型。它是一种值类型,多态基类在optional中不起作用。就像将多态基类放在vector或类似的容器中是行不通的。返回一个指针。通常将建议表述为“一般”是有原因的。 关于c++-std::optional和

Java SE 继承和多态 (图文搭配,万字详解!!)

目录1.继承1.1为什么需要继承1.2继承概念 1.3继承的语法1.4父类成员访问1.4.1子类中访问父类的成员变量1.4.2子类中访问父类的成员方法 1.5super关键字 1.6子类构造方法1.7super和this1.8再谈初始化1.9protected关键字1.10继承方式 1.11final关键字1.12继承与组合2.多态2.1多态的概念 2.2多态实现条件2.3重写2.4向上转移和向下转型2.4.1向上转型 2.4.2向下转型 1.继承1.1为什么需要继承Java中使用类对现实世界中实体来进行描述,类经过实例化之后的产物对象,则可以用来表示现实中的实体,但是现实世界错综复杂,事物之

c++ - 当 auto 遇到多态和虚函数时,正确的行为是什么?

classB{public:virtualvoidf(){printf("B\n");}};classD:publicB{public:voidf(){printf("D\n");}};intmain(void){B*d=newD();d->f();autob=*d;b.f();}对于d->f();,输出是D。这是正确的。但是对于b.f();,输出是B。这样对吗? 最佳答案 Isthisright?没错,类型是在编译时推导的。auto使用与templateargumentdeduction相同的规则对于类型推导,基于静态类型,不考虑

c++ - 不能使用值但引用和指针的多态性的原因

我在下面找到帖子C++polymorphismwithoutpointers这说明C++具有多态特性必须使用指针或引用类型。我查看了一些进一步的资源,他们都说了同样的原因。支持带值的多态性是否存在任何技术困难,或者有可能但C++已决定不提供该功能? 最佳答案 多态处理值的问题归结为objectslicing问题:因为派生对象可能比它们的基类使用更多的内存,所以在自动存储中(即在堆栈上)声明一个值会导致只为基类分配内存,而不是为派生对象分配内存。因此,属于派生类的对象部分可能会被切掉。这就是为什么C++设计者有意识地决定将虚拟成员函数

c++ - 找出多态对象的大小

我有一个指向多态对象的指针Base*base_ptr。是否可以找出所述对象的动态类型的大小?AFAIK,sizeof(*base_ptr)产生base_ptr静态类型的大小。我开始怀疑这是不可能的,但也许我忽略了一些东西。注意:我知道我可以向我的类型层次结构添加一个虚函数来返回大小,但这不是我的理想解决方案。编辑:sizeof(base_ptr)->sizeof(*base_ptr) 最佳答案 不,您不能在C++中这样做-至少以可移植的方式。最好的办法是在每个类中实现getSize()成员函数。

c++ - 多态性在没有指针/引用的情况下是否可以在 C++ 中工作?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:VirtualFunctionsObjectSlicing让我们考虑一下:#include#includeusingnamespacestd;structA{virtualvoiddo_it(){coutv;v.push_back(B());v[0].do_it();//outputisA}将调用哪个函数?如果不存在切片,基本上可以在没有指针的情况下使用多态性吗?