例子问题
问题1:类继承
类Pet {
公众:
宠物(){}
virtual void bar() {cout << "In pet bar();}
};
类Cat:公共宠物{
公众:
虚拟void eat() {cout <<“猫吃”;}
virtual void bar() {cout << "In Cat bar()";}
};
给定上述类,结果会是什么?
int main () {
菲利克斯猫;
不能忍受的事;
皮夫=菲利克斯;
peeve.bar ();
}
程序运行并输出:
以上皆非
编译错误
程序运行并打印:In Pet Bar()
运行时错误
程序运行并打印:In Pet Bar()
Cat类继承自Pet类,并且在main中创建了每个对象的实例。
皮夫=菲利克斯;
当felix被分配给peeve时,它失去了猫的属性,现在变成了宠物。当bar方法被调用时,它将在Pet类而不是Cat类中调用bar。
如果这行代码是:
菲利克斯=皮夫;
然后,程序将崩溃。这个崩溃是因为我们试图将一个Pet(父类)分配给一个Cat(子类)。将父节点分配给子节点将导致切片的问题因为父母比孩子“大”。如果你想把大的东西(宠物)放进一个小的容器(猫)里,那是行不通的。
问题13:面向对象程序设计
类成员{
公众:
成员(){计数<< 1;}
};
阶级基础{
公众:
Base(){cout<< 1;}
先进性成员;
};
类派生:public Base{
公众:
派生(){cout << 3;}
};
int main () {
派生der;
}
给定上面的代码,程序的输出是什么?
123
321
213
312
132
123
当一个对象被创建时,所有东西被创建的顺序如下:
1.首先创建成员变量。
2.被调用的父类的构造函数(如果对象有父类)
3.调用对象自己的构造函数。
下面的代码中,我们可以看到在main中创建了一个派生对象。由于派生类有父类,因此调用顺序跳转到基类。现在我们在基类内部,还没有输出任何东西。在基类内部,首先创建局部变量。这就把我们带到了Member类。
在Member类中,调用构造函数并输出1。
在此之后,我们跳转回Base类的构造函数并输出2。
最后,我们回到我们开始的地方,派生类。调用派生函数的构造函数并输出3。最终输出为123。
问题1:类继承
考虑下面的代码:
公共类矩形{
私人双宽、高;
公共矩形(双w,双h) {
宽度= w;
高度= h;
}
public double getArea() {
返回宽度*高度;
}
public double getPerimeter() {
返回2 *宽度+ 2 *高度;
}
}
公共类Square {
私人双面;
公共广场(双s) {
边= s;
}
public double getArea() {
返回边*边;
}
public double getPerimeter() {
返回4 *边;
}
}
下列哪一项代表重新定义广场利用了继承的好处?
公共类Square扩展矩形{
私人双面;
公共广场(双s) {
超级(s, s);
}
}
公共类Square {
private矩形r;
公共广场(双s) {
r = new Rectangle(s,s);
}
public double getArea() {
返回r.getArea ();
}
public double getPerimeter() {
返回r.getPerimeter ();
}
}
公共类Square扩展矩形{
公共广场(双s) {
超级(s, s);
}
}
公共类Square实现矩形{
公共广场(双s) {
超级(s, s);
}
}
公共类Square扩展矩形{
公共广场(双s) {
新的矩形(s, s);
}
}
公共类Square扩展矩形{
公共广场(双s) {
超级(s, s);
}
}
我们知道,正方形实际上只是矩形的一个子类,因为它只是一个有四个相等边的矩形。使用继承,您可以非常容易地重用您的矩形
代码。首先,您需要扩展矩形
类:
公共类Square扩展矩形{…
接下来,你可以摆脱这个领域一边
.的构造函数广场
打电话给矩形
构造函数。你可以使用超级
(因为Rectangle是父类)。
之后,您可以删除getArea
和getPerimeter
方法,因为它们将由超类处理。这给了你一段非常简单的代码!
问题12:面向对象程序设计
下面哪个是真正的关于对象类?
每个类都有Object的所有方法。
对象是唯一没有任何后代的类。
对象至少继承四个类。
对象有一个超类Entity。
这些答案都不正确。
每个类都有Object的所有方法。
对象是所有其他类(甚至是用户创建的类)都可以继承的最基本的类。因此,所有类都有Object的方法。考虑类的一种方法是考虑树:Object类是树中最低的节点,所有其他节点都可以连接到它。
问题1:类继承
真或假。
BetterMan类继承自Man类。
公共类BetterMan扩展Man {
}
真正的
假
真正的
类BetterMan继承了类man的方法。关键字“extends”意味着BetterMan将从Man获得所有的方法,并且能够通过添加自己的方法来扩展类。来自Man的所有方法都可以通过调用关键字better在BetterMan中使用。
问题1:类继承
代码打印什么?
类
父{最后
公共
无效
显示(){
System.out.println (
“父:显示()被称为“
);
}
}
类
孩子
扩展
父{
公共
无效
显示(){
System.out.println (
“孩子:显示()被称为“
);
}
}
公共
类
主要{
公共
静态
无效
main(String[] args) {
家长父母
=
新
孩子();
父
,告诉();
}
}
编译错误
运行时错误
父::显示()调用
孩子::显示()调用
孩子::显示()调用
父::显示()调用
编译错误
Final方法不能被重写。因此代码无法编译。现在,如果最后一个修饰符被删除。代码将编译并运行并产生:
孩子::显示()
问题21:面向对象程序设计
类Pet {
公众:
宠物(){}
virtual void bar() {cout << "In pet bar();}
};
类Cat:公共宠物{
公众:
虚拟void eat() {cout <<“猫吃”;}
virtual void bar() {cout << "In Cat bar()";}
};
给定上述类,结果会是什么?
int main () {
宠物* petPtr = new Cat();
petPtr -> eat();
}
程序运行并输出:“吃宠物”
这些都不是
程序已编译,但出现运行时错误
编译错误
程序运行并输出:“吃猫”
编译错误
当子类继承父类的属性时,有些属性可以继承,有些则不能。在c++中,父类的构造函数不被继承。Cat类没有构造函数,因此程序无法编译。