`
xmy564470466
  • 浏览: 8768 次
  • 性别: Icon_minigender_1
  • 来自: 河北衡水
最近访客 更多访客>>
社区版块
存档分类
最新评论

C++派生类的成员标识与访问

阅读更多

成员访问属性:

 

1.    1.不可访问

2.    2.私有

3.    3.保护

4.    4.公有

 

一.基类与派生类有同名成员:(二义性问题)

 

一般说来,在派生类中对基类成员的访问应该是唯一的,但是,由于多继承情况下,可能造成对基类中某成员的访问出现了不唯一的情况,则称为对基类成员访问的二义性问题。

 

对象名.成员名”“对象指针->成员名的方式先访问派生类的,如果派生类没有新增与基类的同名成员,此时基类有多个同名成员,则系统无法判断该调用哪个成员.如果访问基类的数据成员则要用到这样的方法:“派生类对象.基类::同名成员”  或 “派生类对象->基类::同名成员”。

此外在派生类的声明时,还可以用using关键字加以澄清,避免二义性问题。

Class Derived:public Base1,public Base2

{

Public:

using Base1::var;

using Base1::fun();

};

Int main()

{

Derived d;

Derived *p=&d;

d.var=1;

d.fun();

d.Base1::var=1;

d.Base1::fun();

p->Base2::var=3;

p->Base2::fun();

return 0;

}

 

二.虚基类:

将共同的基类设置为虚基类,这时候从不同路径继承过来的同名数据成员就只有一个副本,同一个函数名也只有一个映射。



 
C有四个基类B1B2B3为直接基类,B0为最远基类

虚基类在派生类的定义过程中声明,语法形式为:

Class 派生类名:virtual 继承方式 基类名

 

 

三.虚基类及派生类的构造函数

<!--[if !supportLists]-->1.    <!--[endif]-->必须包含所有的数据成员(包括不可见)

<!--[if !supportLists]-->2.    <!--[endif]-->调用基类构造函数来初始化基类成员,可调用多个基类构造函数。(注意顺序)

在多继承的情况下,派生类的构造函数格式如下:

 

  <派生类名>(<总参数表>):<基类名1>(<参数表1>),<基类名2>(<参数表2>),

   <子对象名>(<参数表n+1>),

    {

     <派生类构造函数体>

    }

  其中,<总参数表>中各个参数包含了其后的各个分参数表。

class Base0{

public:

Base0(int var):var0(var){}

Int var0;

Void fun0(){}

};

class Base1:virtual public Base0{

public:

Base1(int var):Base0(var){}//初始化Base0的成员

int var;

};

Class Base2:virtual public Base0{

public:

Base2(int var):Base0(var){} //初始化Base0的成员

int var;

}

class Derived : public Base1,public Base2{

public:

Derived(int var) : Base0(var),Base1(var),Base2(var){} //初始化Base0的成员

Int var;

Void fun(){}

}

Int main()

{

Derived d(1);

d.var=9;

d.fun();

return 0;

}

建立d对象的时候,通过其构造函数初始化列表,因为Derived为最远派生类,虚基类烦人成员则有最远派生类的构造函数调用虚基类的构造函数进行初始化,改派生类的其他基类(Base1Base2)对虚基类的构造函数调用被自动忽略。

  • 大小: 60.2 KB
0
0
分享到:
评论

相关推荐

    C++继承与派生课件

    5. **类成员的标识与访问**: 通过访问控制关键字(public, private, protected)来确定成员的可见性和可访问性,确保数据的安全性和封装性。 6. **示例分析**: 示例 7-1 展示了公有继承的应用,派生类`...

    数组C++语言程序设计 继承与派生

    5. **类成员的标识与访问**:通过继承,派生类可以访问基类的成员,但访问权限受到基类成员访问控制的影响。派生类可以通过作用域解析运算符`::`来明确指定访问基类的成员。 6. **继承与派生的目的**:继承的主要...

    C++语言程序设计:第07章 继承与派生.pptx

    5. 类成员的标识与访问: - 在派生类中,基类成员的标识可以通过作用域解析运算符::来访问,例如`base_class::member`。 - 通过派生类的对象,可以访问基类的public成员,但私有和受保护成员仅能通过派生类的成员...

    清华大学C++进阶讲义:第7章类的继承.pdf

    本文将对C++语言中类的继承进行详细的讲解,包括继承与派生的基本概念、单继承与多继承、类成员的访问控制、派生类对象的构造和析构、派生类与基类对象的类型转换、类成员的标识与访问、虚继承等内容。 继承是面向...

    C++课件 类、流、虚继承

    至于类成员的标识与访问,C++中,成员变量通常用来存储对象的状态,而成员函数(方法)负责处理对象的行为。通过访问控制,我们可以控制这些成员如何被其他代码访问,以保持数据的安全性和封装性。在类的设计中,应...

    C#与C++类的继承机制的对比分析.doc

    C++允许在基类中直接访问派生类的非静态成员,而C#则需要通过公共接口或方法进行访问。 总之,C++的继承机制提供了更多的灵活性,包括多重继承,而C#的单一继承和更严格的封装规则使得代码更加简洁和易于管理。两种...

    c选择题复习题(一).pdf

    1. 类成员函数与非成员函数: 类的成员函数包括构造函数、析构函数以及成员函数,而友元函数虽然可以访问类的私有成员,但它不是类的成员函数。拷贝初始化构造函数实际上也是一种成员函数,用于创建新对象时复制另一...

    用字符指针在派生类中的实现

    - 派生类是从基类继承的类,可以添加新的成员变量和成员函数,也可以覆盖基类的成员。 - 如果基类有一个字符指针成员,派生类可以选择保留它,修改它,或者增加新的字符指针成员。 - 基类的字符指针在派生类中...

    C++ 继承详解 ppt C++ 继承详解(4)

    #### 六、类成员的标识与访问 - **标识符**:在派生类中可以通过作用域解析运算符(::)来明确指定使用哪个类的成员。 - **访问控制**:在派生类中可以改变基类成员的访问权限,例如将基类的 `public` 成员修改为 `...

    c++第八章 继承与多态课件ppt

    **多重继承与派生类成员标识** 多重继承是指一个派生类可以从多个基类继承,这在表示复杂的类层次结构时非常有用。然而,多重继承可能导致名称冲突(即派生类中可能有多个基类具有相同名称的成员),解决这个问题...

    C++期末考试复习题(理工).pdf

    根据单项选择题中提供的选项和描述,我们能了解到C++中对于继承、函数原型、友元类、内联函数、析构函数、虚函数等概念的理解与使用,以及对派生类和基类之间的成员访问规则和多态性应用的考察。这些知识点在C++期末...

    第二课 C++经典语法与应用 类的编写与应用 1.rar

    通过继承,一个类(子类或派生类)可以从另一个类(基类或父类)中获取属性和行为。这使得代码重用成为可能,同时也可以通过多态性(即一个接口,多种实现)来增强程序的灵活性。 多态性是C++的另一大亮点。它包括...

    继承与派生王PPT学习教案.pptx

    类成员的标识与访问涉及到访问修饰符,如public、private和protected。它们决定了成员在类内外的可见性。例如,在C++中,public成员可以在任何地方被访问,private成员只能在类内部访问,而protected成员可以在类...

    C++判断题题库

    - **知识点**: 在C++中,类成员的访问权限分为`public`(公有)、`protected`(受保护)和`private`(私有)三类。使用`class`关键字定义的类,默认的访问权限是`private`。 - **解释**: 如果没有显式地指定访问权限,那么...

    C++复习.docx

    25. **protected派生**:在protected派生中,派生类可以访问基类的protected成员,但在private派生中,派生类只能访问基类的public成员。 以上是基于题目给出的部分内容总结的C++关键知识点,涵盖了类、对象、继承...

    c++面向对象程序设计-考试题及习题讲解(免费下载)

    14. 继承方式与访问权限:基类的公有成员在派生类中的访问权限取决于继承方式,公有继承保持访问权限不变,私有继承使所有成员变为私有,保护继承使公有成员变为保护成员。 15. 多态性:C++的多态性分为静态多态...

Global site tag (gtag.js) - Google Analytics