首页 > 试题广场 >

设有以下定义程序 ; 则以下合法的调用语句是()

[不定项选择题]
设有以下定义程序 ; 则以下合法的调用语句是()
#include <iostream>
using namespace std;
class A1 {
public:
    void show1() {
        cout << "class A1" << endl;
    }
};
class A2 : public A1 {
    void show2() {
        cout << "class A2" << endl;
    }
};
class A3 : protected A2 {
    void show3() {
        cout << "class A1" << endl;
    }
};
int main() {
    A1 obj1;
    A2 obj2;
    A3 obj3;
    return 0;
}




  • obj3.show3();
  • obj2.show1();
  • obj1.show1();
  • obj3.show1();
当仅为公有继承时,派生类的对象才仅能访问基类的公有成员,注意基类中的受保护成员也是不可见的。

发表于 2017-09-07 11:21:53 回复(2)
类A1、A2和A3中的成员函数show1、show2和 show3都是public(公开的),因此,各个类都可以通过对象调用该成员函数,即选项A、B和C;又因为这个属于类的多继承关系,即A1(基类)-->A2--->A3,由于A3继承A2的继承方式是protected(受保护的),所以类A1中的show1函数在派生类A3中是 protected,因此,不能通过类A3的对象访问 类A1中的 show1,故D选项错。
编辑于 2017-07-18 22:32:48 回复(1)
基类public成员, 在子类中仍然是public成员,在子类中可以使用, 在子类的对象中也可以调用
基类的protected成员,在子类中仍然是protected成员,在子类中可以使用,在子类的对象中不能直接调用
private成员,只能在基类中使用,在基类对象,子类,子类对象中都不能使用
发表于 2017-10-28 09:57:59 回复(0)
默认访问权限是private obj3.show3()是错误的
发表于 2022-03-09 15:01:41 回复(0)
obj3.show3()为什么错的
发表于 2023-05-15 16:55:13 回复(1)
不懂就问,类内未做声明的变量不是私有属性的吗
发表于 2022-03-30 11:38:18 回复(0)
class的默认权限不是private嘛,我看只有class A写了public呀。。为啥obj3.show3()能访问呢
发表于 2022-03-02 00:58:41 回复(0)
对象不能直接访问私有函数show3
发表于 2022-04-01 23:30:27 回复(0)
class A3中的确有show1函数,但是是保护类型的,累外不能访问
发表于 2018-07-26 13:12:35 回复(0)
默认是私有的
发表于 2023-11-05 21:10:02 回复(0)
对于选项A,A3中的show3没有指定访问类型,因此默认是private私有访问,而私有成员只能通过类内函数访问
编辑于 2023-10-11 10:54:41 回复(0)
1、基类当中定义的public类型,对其类对象可见; 2、基类当中定义的public及protected类型,无论哪种继承方式,在子类当中可见 3、只有基类当中定义的public类型,通过public继承的,子类对象可见
发表于 2022-09-20 23:57:36 回复(0)
公有的就是类外就能访问的,保护的是可以给子类访问的,私有的是自己才能访问的。
编辑于 2022-11-05 17:14:17 回复(0)
A项:类中成员函数默认是private,如果在代码中添加public,改成如下形式就能够合法调用了
class A3 : protected A2 {
public:
    void show3() {
        cout << "class A1" << endl;
    }
};


发表于 2023-08-15 10:01:21 回复(0)
#include <iostream>
using namespace std;
class A1 {
public:
    void show1() {
        cout << "class A1" << endl;
    }
};
class A2 : public A1 {
    void show2() {
        cout << "class A2" << endl;
    }
};
class A3 : protected A2 {
    void show3() {
        cout << "class A1" << endl;
    }
};
int main() {
    A1 obj1;
    A2 obj2;
    A3 obj3;
    return 0;
}

发表于 2022-09-13 22:34:08 回复(0)
派生类类内,不管哪种继承,一定能访问基类的public和protected成员,永远不能访问private成员; 派生类对象,只有public派生时,才能访问基类的public成员; 派生类对象中含有从基类继承来的成员,但是派生类并不总能直接对其访问和修改
发表于 2022-08-05 17:46:30 回复(0)
class默认成员的属性是private所以A错
发表于 2022-06-20 15:57:33 回复(0)
只有BC是对的
发表于 2022-04-18 23:20:37 回复(0)
obj3.show3()是错误的,因为show3是private类型,这是visualstudio里的运行结果
发表于 2022-03-23 16:51:36 回复(1)
函数里 ENDL 这样写也合法?
发表于 2019-06-03 08:25:43 回复(0)