有如下程序: ClassBase{ public: intdata; }; ClassDerived1:publicBase{}; ClassDerived2:protectedBase{}; intmain(){ Derived1d1; Derived2d2; d1.data=0;//① d2.data=0;//② return0; } 下列关于程序编译结果的描述中,正确的是( )。A.①②皆无编译错误B.①有编译错误,②无编译错误C.①无编译错误,②有编译错误D.①②皆有编译错误

题目

有如下程序: ClassBase{ public: intdata; }; ClassDerived1:publicBase{}; ClassDerived2:protectedBase{}; intmain(){ Derived1d1; Derived2d2; d1.data=0;//① d2.data=0;//② return0; } 下列关于程序编译结果的描述中,正确的是( )。

A.①②皆无编译错误

B.①有编译错误,②无编译错误

C.①无编译错误,②有编译错误

D.①②皆有编译错误


相似考题
更多“有如下程序: ClassBase{ public: intdata; }; ClassDerived1:publicBase{}; ClassDerived2: ”相关问题
  • 第1题:

    有如下程序:includeusing namespace std;class BASE{public:~BASE( ){cout<<"BASE";}

    有如下程序: #include<iostream> using namespace std; class BASE{ public: ~BASE( ){cout<<"BASE";} }; class DERIVED:public BASE{ public: ~DERIVED( ){cout<<"DERIVED";} }; int main( ){DERIVED x;return 0;} 程序的输出结果是

    A.BASE

    B.DERIVED

    C.BASEDERIVED

    D.DERIVEDBASE


    正确答案:D
    解析:基类和派生类的析构函数的执行顺序是先执行派生类的析构函数,最后执行基类的析构函数;故先执行DIVERED的析构函数,后执行BASE的析构函数。

  • 第2题:

    有如下程序:includeincludeusing namespace std;class BASE{char c;public

    有如下程序: #include<iostream>#include<iosream> using namespace std; class BASE{ char c; public; BASE(char n):c(n){} virtual ~ BASE(){cout<<c;} }; class DERIVED; public BASE{ char c; public: DERIVED (char n): BASE (n+1)

    A.XY

    B.YX

    C.X

    D.Y


    正确答案:A

  • 第3题:

    有如下程序: Class Base{ publiC: int data; }; Class Derivedl:publiC Base{}; Class Derived2:proteCted Base{}; int main( ) { Derivedl dl; Derived2 d2; dl.data=0;//① d2.data=0;//② retum 0; } 下列关于程序编译结果的描述中,正确的是( )。

    A.①②皆无编译错误

    B.①有编译错误,②无编译错误

    C.①无编译错误,②有编译错误

    D.①②皆有编译错误


    正确答案:C
    本题考查公用继承和保护继承对基类成员的访问属性。在公用继承中,基类的公用成员和保护成员在派生类中保持原有访问属性,其私有成员仍为基类私有、稿.受保护继承中,基类的公用成员和保护成员在派生类中成了保护成员,其私有成员仍为基类私有。本题中Derived1公用继承Base.所以①编译正确,Derived2保护继承Base,所以②编译不正确。

  • 第4题:

    若有以下程序: include using namespace std; class Base { public:void who(){ cout

    若有以下程序:

    include <iostream>

    using namespace std;

    class Base

    {

    public:

    void who()

    {

    cout<<"class Base"<<end1;

    }

    };

    class Derivedl : public Base

    {

    public:

    void who()

    {

    cout<<"class Derivedl"<<end1;

    }

    };

    class Derived2 : public Base

    {

    public:

    void who()

    {

    cout<<"class Derived2"<<end1;

    }

    };

    int main()

    {

    Base *p;

    Derivedl obj1;

    Derived2 obi2;

    p=&obj 1;

    p=&obj2;

    p->who ( );

    return 0;

    }

    则该程序运行后的输出结果是【 】。


    正确答案:class Derived2
    class Derived2 解析:本题考核对象指针的应用。主函数中定义了一个Base类对象指针p,然后逐步被赋值为obj1和obj2,最后通过对象指针p调用函数who(),也即调用Derived2中的函数who(),输出class Derived2。

  • 第5题:

    若有以下程序:includeusing namespace Std;Class Base{public:Base(){x=0;}int x;};c

    若有以下程序: #include<iostream> using namespace Std; Class Base {public: Base() {x=0;} int x;}; class Derivedl:virtua1 public Base {public: Derived1() {x=10;}}; class Derived2:virtual1 public Base {public: Derived2()

    A.20

    B.30

    C.10

    D.0


    正确答案:A
    解析: 本题考查虚基类的应用。虽然Derived1和Derived2都是由共同的基类x派生而来的,但由于引入了虚基类,使得它们分别对应基类的不同副本,这时数据成员x只存在一份拷贝,不论在类Derivedl中修改,还是在De- rived2中修改,都是直接对这惟一拷贝进行操作。本题程序执行语句“Derivedob“”时,就会先调用虚基类Base的构造函数,使得x=0,然后执行类Derived1的构造函数使得x=10,再执行类Derived2的构造函数,使得x=20。最后输出x的值为20。