派生类对象的创建过程中基类部分是如何进行初始化 详细�0�3
1个回答
展开全部
1 : 由于派生类对象中的基类对象部分是在派生类对象创建时首先被构造的,因此基类对象的数据成员的创建和初始化是先于派生类新增属性的创建和初始化的。如果基类对象的构造需要传递参数对它的数据成员进行初始化,则需要在派生类构造函数定义的初始化表中调用基类的构造函数,并将由派生类构造函数的参数表传递来的相应的参数作为实参传递给被调用的基类构造函数,用于对基类对象的初始化。例如: class point { int x, y; public: point(int x, int y); // … }; class circle public point { int radius; public: circle(int x, int y, int radius); // … } … circle::circle(int x, int y, int radius):point(x, y) { this->radius = radius; } 2 : 在C++中,类的派生有三种方式: (private)派生、 (protected)派生和公有 (public)派生。这三种派生方式对基类中具有各种访问权限的成员的继承情况如下: ① :在三种派生方式定义的派生类中都不能被直接访问,当然也不能被派 生类对象的使用者从类外直接访问。 ② :分为两种情况: · (private)派生方式定义的派生类中基类的保护成员在派生类中被变为私有成员, 因此这些成员能够被派生类成员直接访问,而不能被派生类对象的使用者从类外直接 访问; · (protected)派生方式和 (public)派生方式定义的派生类中基类的保护成员在 派生类中仍然保持为保护成员,因此这些成员能够被派生类成员和派生类的派生类成 员直接访问,而不能被派生类对象的使用者从类外直接访问。 ③ :分为三种情况: · (private)派生方式定义的派生类中基类的公有成员在派生类中被变为私有成员, 因此这些成员能够被派生类成员直接访问,而不能被派生类对象的使用者从类外直接 访问; · (protected)派生方式定义的派生类中基类的公有成员在派生类中被变为保护成 员,因此这些成员能够被派生类成员和派生类的派生类成员直接访问,而不能被派生 类对象的使用者从类外直接访问; · (public)派生方式定义的派生类中基类的公有成员在派生类中仍然保持为公有成 员,因此这些成员不但能够被派生类的成员直接访问,而且也能被派生类对象的使用 者从类外直接访问。 3 : 以任何派生方式定义派生类都不能直接访问基类的私有成员。如果要实现派生类能直接访问基类的私有成员,可以通过以下两种方法实现: ① 将基类的私有成员声明保护成员。 ② 将派生类声明为基类的友元类。 4 : 保护段成员允许类内直接访问,但不能被类对象的使用者从类外直接访问;而公有段成员不仅允许类内直接访问,而且也允许类对象的使用者从类外直接访问。 保护段成员在派生类的继承情况分为两种:在 (private)派生方式定义的派生类中基类的保护成员成为派生类的私有成员;在 (protected)派生方式和 (public)派生方式定义的派生类中基类的保护成员仍然是派生类的保护成员。 5 : 在多继承派生中,如果派生类的多个直接基类是从一个间接基类中直接派生的(会在多继承派生类对象中存在一个以上的间接基类对象),并且在多继承派生类中需要访问该间接基类的成员,则会产生访问的歧义性。解决这一问题,就必须引入虚基类,从而多继承派生类的直接基类从间接基类派生时,可以将该间接基类声明为虚基类,使得在多继承派生类对象中只有一个间接基类对象,避免了上述的访问歧义性。 虚基类中一般应该有一个不需要传递参数的构造函数。否则就必须在多继承派生类构造函数的初始化表中显式调用作为虚基类的间接基类的构造函数。 6 :⑴ 若同一派生层次中同时包含虚基类和非虚基类,应先调用虚基类构造函数,再调用非虚 基类的构造函数,即“ "; ⑵ 若同一派生层次中包含多个虚基类,这些虚基类的构造函数将按照派生类定义中对它们 声明的先后次序,从左至右调用。 ⑶ 若虚基类是非虚基类的派生,则仍然先调用该虚基类的基类构造函数,再调用派生虚基 类的构造函数。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询