计算机科学:类继承

学习计算机科学的概念,示例问题和解释

大学导师应用商店 大学导师安卓商店

例子问题

问题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是父类)。

之后,您可以删除getAreagetPerimeter方法,因为它们将由超类处理。这给了你一段非常简单的代码!

问题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类没有构造函数,因此程序无法编译。

大学导师提供的学习工具