首页
学习
活动
专区
圈层
工具
发布

基类和派生类

1.什么是基类?   在面向对象设计中,被定义为包含所有实体共性的class类型,被称为“基类”。-百度百科   简单理解,即父类(相对派生类) 2.什么是派生类?   ...利用继承机制,新的类可以从已有的类中派生。那些用于派生的类称为这些特别派生出的类的“基类”。   简单理解,即子类(相对基类) 3.两者关联   基类和派生类是一个相对的关系。...基类和派生类反映了类与类的继承关系,是相对而言的。基类又称父类,是被派生类继承的类。派生类又称子类,是从一个已有类的基础上创建的新类,新类包含基类的所有成员,并且还添加了自己的成员。...4.实际例子   假设有两个类A和B,A和B都需要实现一个打印的功能,原始的做法是A写一个打印函数,B也写一个打印函数。两个类还好可以写,但多了就特别麻烦。...这个时候我们就可以写一个类C,C里面写一个打印函数。A和B分别继承C,这样A和B就不要写打印函数了。这样即节省了代码,又优化了结构。 上面的情况,C是A和B的基类,A和B是C的派生类。

1.5K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    基类派生类多态虚函数?

    通常在层次关系的根部有一个基类,其他类则直接或间接的从基类继承而来,这些继承得到的类称为派生类。基类负责定义在层次关系中所有类共同拥有的成员,而每个派生类定义各自特有的成员。...成员函数与继承派生类可以继承其基类的成员, 然而有时候派生类必须对其重新定义。派生类需要对这些操作提供自己的新定义以覆盖从基类继承而来的旧定义。...派生类可以继承定义在基类中的成员,但是派生类的成员函数不一定有权访问从基类继承而来的成员。 和其他使用基类的代码一样,派生类能访问公有成员,而不能访问私有成员。...派生类必须通过使用类派生列表(clss erivatin list)明确指出它是从哪个(哪些)基类继承而来的。...现在,我们只需知道访问说明符的作用是控制派生类从基类继承而来的成员是否对派生类的用户可见。 如果一个派生是公有的,则基类的公有成员也是派生类接口的组成部分。

    73420

    c++-基类与派生类

    覆盖(Override)是指派生类中存在重新定义的函数,其函数名、参数列、返回值类型必须同父类中的相对应被覆盖的函数严格一致,覆盖函数和被覆盖函数只有函数体 (花括号中的部分)不同,当派生类对象调用子类中该同名函数时会自动调用子类中的覆盖版本...下面我们从成员函数的角度来讲述重载和覆盖的区别。 成员函数被重载的特征有: 相同的范围(在同一个类中);2) 函数名字相同;3) 参数不同;4) virtual关键字可有可无。...覆盖的特征有: 不同的范围(分别位于派生类与基类);2) 函数名字相同;3) 参数相同;4) 基类函数必须有virtual关键字。...隐藏是指派生类的函数屏蔽了与其同名的基类函数,规则如下: 如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。...2) 如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)。

    72820

    【C++】继承 - 从基类到派生类的代码复用逻辑

    这里的不可见是指基类的私有成员还是被继承到了派生类对象中,但是语法上限制派生类对象不管在类里面还是类外面都不能去访问它。...寓意把派生类中基类那部分切出来,基类指针或引用指向的是派生类中切出来的基类那部分。 基类对象不能赋值给派生类对象。 基类的指针或者引用可以通过强制类型转换赋值给派生类的指针或者引用。...继承中的作用域 3.1 隐藏规则 在继承体系中基类和派生类都有独立的作用域。 派生类和基类中有同名成员,派生类成员将屏蔽基类对同名成员的直接访问,这种情况叫隐藏。...因为这样才能保证派生类对象先清理派生类成员再清理基类成员的顺序。 派生类对象初始化先调用基类构造再调派生类构造。 派生类对象析构清理先调用派生类析构再调基类的析构。...方法1: 基类的构造函数私有化,派生类的构成必须调用基类的构造函数,但是基类的构成函数私有化以后,派生类看不见就不能调用了,那么派生类就无法实例化出对象。

    79010

    Python+DRVT 从外部调用 Revit:用 Python 启动 Revit

    即使这样依然存在多项挑战:至少需要在插件与系统两端实现匹配的信息交换、Revit API 接口规模庞大只能用到哪些在双端实现哪些、读取需要实现、更新(创建,修改,删除)又需要实现、每更新一点就得一遍遍验证完善...现在让我们从极简的示例开始,看看是多么强大且简洁。...只需几行 Python 代码,就能启动一个可交互、可调用的 Revit 会话,就像使用任意 SaaS 服务一样轻松,甚至更便捷:对应的 Revit 进程是可交互的,与正常手工启动的无异。​...可以不再关心 Revit 插件环境的搭建、只在外部写 Python 脚本不需要再写 Revit 插件、修改代码后再也不会提示是否允许加载插件……想象一下,团队充分利用 Python 语言的优势与其优秀的生态并且只需几行代码...,就能发起并开始执行完整的 Revit 工作流,然后可以在外部充分利用Revit的强大能力,实现自动化,实现系统集成,与AI结合……

    27710

    c++继承 基类 派生类 虚函数

    参考链接: C++继承 继承    类和类的关系有组合、继承和代理。继承的本质就是代码复用。子类继承父类中的一些东西,父类也称为基类,子类也称为派生类。派生类继承了基类除构造函数以外的所有成员。 ...基类中不同访问限定符下(public、protected、private)的成员以不同的继承方式继承,在派生类中的访问限定也不同,具体如下:  基类的布局优先于派生类  #include类的布局优先级高于派生类。...1.调用基类的构造函数 2.调用派生类的构造函数 派生类的析构可想而知: 1.调用派生类的析构函数 2.调用基类的析构函数  虚函数  如下程序:  class Base { public:     Base...此时基类和派生类的布局如下:     vfptr的指针大小为4(32位机器)。因此基类字节数为8,派生类为12。

    1.6K20

    C++中派生类对基类成员的访问形式

    C++中派生类对基类成员的访问形式主要有以下两种: 1、内部访问:由派生类中新增成员对基类继承来的成员的访问。 2、对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问。...基类的private成员在私有派生类中是不可直接访问的,所以无论是派生类的成员还是通过派生类的对象,都无法直接访问从基类继承来的private成员,但是可以通过基类提供的public成员函数间接访问。...基类的private成员在私有派生类中是不可直接访问的,所以无论是派生类成员还是派生类的对象,都无法直接访问从基类继承来的private成员,但是可以通过基类提供的public成员函数直接访问它们。... 当类的继承方式为保护继承时,基类的public成员和protected成员被继承到派生类中都作为派生类的protected成员,派生类的其它成员可以直接访问它们,但是类的外部使用者不能通过派生类的对象访问它们...基类的private成员在私有派生类中是不可直接访问的,所以无论是派生类成员还是通过派生类的对象,都无法直接访问基类中的private成员。

    3.2K70

    派生类的实始化、初始化顺序

    1、先实始化父类成员,调用父类的构造函数,有多个基类的从左向右按声明顺序实始化。 2、内嵌对象实始化,内嵌对像的构造器。如果父类或是内嵌对象,有无参构造器的话,可以不用显示的调用。...3、派生类的构造器。 构造器的调用过程是,基类->成员->子类,而且析构器我们基本上不用去管理,因为析构器没有参数,而析构器的调用过程是,子类->成员->基类。...std; class A { public: A(int iA){} }; class B : public A { public: B(int iA, int iB) :A(iA){}// 子类要给父类有参构造函数传参初始化...}; class C : public B { public: C(int iC, int iB, int iA) :B(iA, iB){} // 子类要给父类有参构造函数传参初始化 }; int main

    30030

    C++:43---派生类向基类转换、静态动态的类变量

    A{};int main(){ A a; B b; a = b; return 0;} ②不能将基类对象绑定到派生类的指针/引用上 A a;B *b;b = &a; //程序错误,不能将基类对象转换为派生类对象...二、转换的本质 派生类可以转换为基类的本质是: ①为什么派生类可以转换为基类:派生类从基类而来,因此派生类中包含了基类的方法和成员。...此时基类可以通过指针或引用指向派生类(相当于将派生类从基类中继承的那部分方法和成员绑定到基类上了,相当于派生类被截断了),然后基类就可以将派生类假装是一个基类对象来使用(调用其中的成员/方法) ②为什么基类不能转换为派生类...如果将一个基类对象绑定到派生类的指针/引用上,此时派生类通过指针/引用访问自己新定义的成员/方法时,发现找不到(因此不能将基类转换为派生类) 例如:下面B继承于A,子类继承于父类,同时为父类的成员开辟了空间...,然后再将基类转换为派生类,这样是错的 //假设B公有继承于A A *a; B b; a = &b; //将派生类转换为基类,正确 B *p = a; //将基类再转换为派生类,错误 五、类静态类型

    2.5K10

    .NET面试题系列 - IEnumerable的派生类

    就像在 Stack 类中的对应操作一样,Peek 方法用来查看起始的数据项。这种方法仅仅返回数据项,而不会真的把数据项从队列中移除。...,和IEnumerable不同,IQueryable返回所有资料然后才进行筛选 可通过sql profiler看到区别 注:还有若干重要的派生类例如Concurrent类型,这些放到多线程同步中...IEnumerable的派生类由于没有泛型,所以基本不考虑使用。 字典,HashSet和哈希表(Hashtable)的实现有很大区别。 HashSet是一个不含值的字典。...在遇到数组查重问题时,哈希永远都是一个利器:https://www.zhihu.com/question/31201024 IEnumerable最重要的一个派生类就是IList接口。...它又有两个主要的派生类Array和List。List的内部实现是一个数组而不是链表。LinkedList才是C#的链表实现。LinkedList不实现IList接口。

    2.4K20

    【C++重载操作符与转换】定义基类和派生类

    一、基类与派生类的基本概念 1.1 基类的定义 基类是派生类的基础,它包含了一组通用的属性和方法,这些属性和方法可以被派生类继承。...draw 方法是一个虚函数,为后续在派生类中实现多态性奠定了基础。 1.2 派生类的定义 派生类通过继承基类,获取基类的属性和方法,并可以添加自己特有的成员,或者重写基类的成员函数。...使得派生类的对象无法在类外部访问基类的任何成员,只有派生类的成员函数和友元函数可以访问这些成员。私有继承通常用于实现细节的隐藏,不希望基类的接口在派生类外部暴露。...意味着派生类的对象不能在类外部访问这些成员,但派生类的派生类可以访问这些 protected 成员。保护继承常用于基类的部分接口只希望在继承层次结构中使用的场景。...例如,我们可以定义一个从 Rectangle 到 Shape 的类型转换运算符。

    7310

    派生类对基类中虚函数和非虚函数的继承效果

    “强制实现”,也就是只要是父类指针调用普通函数,那就是父类的普通函数 而虚函数的作用,主要是为了让父类指针可以调用子类的函数,这种是在运行时才决定调用哪个函数 1、虚函数:   C++的虚函数主要作用是...“运行时多态”,父类中提供虚函数的实现,为子类提供默认的函数实现。...子类可以重写父类的虚函数实现子类的特殊化。 2、纯虚函数:   C++中包含纯虚函数的类,被称为是“抽象类”。抽象类不能使用new出对象,只有实现了这个纯虚函数的子类才能new出对象。   ...3、普通函数:   普通函数是静态编译的,没有运行时多态,只会根据指针或引用的“字面值”类对象,调用自己的普通函数。   普通函数是父类为子类提供的“强制实现”。   ...因此,在继承关系中,子类不应该重写父类的普通函数,因为函数的调用至于类对象的字面值有关。 参考链接

    1.2K10
    领券