首页 > 试题广场 >

下面程序的输出是什么?

[单选题]
#include <iostream>
using namespace std;
class parent
{  
    int i;
  protected:
    int x;
  public:
   parent(){x=0;i=0;}
   void change(){x++;i++;}
   void display();
};
class son:public parent
{ 
    public:
        void modify();
};
 void parent::display(){cout<<"x="<<x<<endl;}
 void son:: modify() {x++;}
int main()
{ 
  son A; parent B;
  A.display();
  A.change();
  A.modify(); 
  A.display();
  B.change();
  B.display();
}
下面程序的输出是什么?
  • x=1 x=0 x=2
  • x=2 x=0 x=1
  • x=0 x=2 x=1
  • x=0 x=1 x=2
类的成员变量未声明访问权限则默认private,这是它和结构体的唯一区别。--基类的private成员不能被子类访问,但其protected成员可以被子类访问,两者均不可在类外访问,故文中子类可以访问x,不能访问i
发表于 2017-09-13 08:20:45 回复(0)
也是醉,A和B明明是2个对象好吗。。。
发表于 2016-11-05 11:47:28 回复(0)
C
发表于 2015-12-08 00:20:01 回复(0)
子类会继承父类除构造函数和析构函数之外所有的数据成员和成员函数。实例化后,子类和父类的对象互不影响。
发表于 2015-09-27 19:41:37 回复(4)
1 son A;parent B;虽然son不能继承parent的构造函数,但初始化A时强制调用了parent的构造函数,使  A.x=0,A.i=0  初始化B使B.x=0,B.i=0
2 A.display() 打印A.x的值
3 A.change() A.x=1,B.x=1
4 A.modify() A.x=2
5 A.display() 打印A.x的值
6 B.change() B.x=1,B.i=1
7 B.display() 打印B.x的值
发表于 2017-09-19 22:21:40 回复(1)
这道题主要考察继承中子类和父类的对象。
在A中,x会一直在A的操作下进行操作;但是在此后调用父类,那么父类根据自己的构造函数,将X初始化为0,所以,前面儿子+++,父亲按照自己的套路来。用谁看谁的构造函数,这是根。
编辑于 2017-03-01 10:32:25 回复(0)

子类会继承父类的所有数据成员和成员函数,并且父类与子类各自的实例对象互不影响!

发表于 2019-06-20 21:27:42 回复(0)
子类和父类的成员变量(x)是分别独立的,互不影响
发表于 2016-09-28 20:30:35 回复(0)

解析如下:

  1. 创建了一个 son 类型的对象 A 和一个 parent 类型的对象 B;
  2. 调用对象 A 的 display 函数,输出 x 的值,由于 son 类没有重新定义 display 函数,因此调用的是从父类继承过来的 display 函数,x 此时的值为初始值0,因此输出为 x=0;
  3. 调用对象 A 的 change 函数,将 x 值加 1,此时 x 值变为 1;
  4. 调用对象 A 的 modify 函数,将 x 值再次加 1,此时 x 值变为 2;
  5. 调用对象 A 的 display 函数,输出 x 的当前值,此时 x 值为 2,因此输出为 x=2;
  6. 调用对象 B 的 change 函数,将 x 值加 1,此时 x 值变为 1;
  7. 调用对象 B 的 display 函数,输出 x 的当前值,此时 x 值为 1,因此输出为 x=1。

因此,程序的输出为 x=0 x=2 x=1,选项C符合题意。

发表于 2023-10-18 20:07:34 回复(0)
A的对象能访问x,但不能访问i。
发表于 2023-03-18 11:04:03 回复(0)
没什么逻辑性,单纯考的是读代码的能力。
发表于 2023-02-21 18:47:08 回复(0)
子类会继承父类除构造函数和析构函数之外所有的    数据成员   和   成员函数  。
发表于 2022-08-06 00:00:54 回复(0)
个人感觉,首先,注意调用先后顺序;然后,同一个对象的话,父子的X数值存在共享关系;最后,同类但不同对象,X数值不共享,重新初始化的~
发表于 2021-04-06 15:29:10 回复(0)
子类会继承父类除了constructor和deconstructor之外的所有数据成员和成员函数。当各自类声明各自的对象时,子类和父类的数据成员是分别独立的,互不影响
发表于 2016-09-26 09:16:02 回复(0)
A中的x,i和B中的x,i应该分别来算,互不影响。
发表于 2015-09-25 22:43:49 回复(0)
估计是想考察继承方式
发表于 2015-09-25 22:43:23 回复(0)
忽悠小学生的?
发表于 2015-09-24 23:25:59 回复(0)