派生类

Python面向对象 | 类的成员

安稳与你 提交于 2019-12-04 14:27:07
一. 细分类的组成成员 之前咱们讲过类大致分两块区域,静态字段部分和方法部分。 每个区域详细划分又可以分为: class A: company = '阿里巴巴' # 静态变量(静态字段) __tel = '400xxxxx' # 私有静态变量(私有静态字段) def __init__(self,name,age): #特殊方法(初始化方法) self.name = name # 对象属性(普通字段) self.__age = age # 私有对象属性(私有普通字段) def func1(self): # 普通方法 pass def __func(self): #私有方法 print(666) @classmethod # 类方法 def class_func(cls): """ 定义类方法,至少有一个cls参数 """ print('类方法') @staticmethod #静态方法 def static_func(): """ 定义静态方法 ,无默认参数""" print('静态方法') @property # 属性 def prop(self): pass 二. 类的私有成员 对于每一个类的成员而言都有两种形式:   公有成员 ,在任何地方都能访问   私有成员 ,只有在类的内部才能方法 私有成员和公有成员的访问限制不同 1. 属性   静态属性   对象属性 静态字段

MFC中CDC类及其派生类

佐手、 提交于 2019-12-04 14:04:05
CDC类(设备上下文类)用于绘图 CDC派生类  封装的GDI函数 功能说明 CPaintDC类 BeginPaint EndPaint 标准客户区绘图,窗口刷新时不消失。 只在WM_PAINT消息下使用(OnPaint()) CWindowDC类 GetWindowDC ReleaseDC 非客户区绘图,窗口刷新时不消失, 在WM_NCPAINT消息下使用 CClientDC类 GetDC ReleaseDC 临时客户区绘图,窗口刷新时消失, 在任何情况下都可以使用 CMemDC类 CreateCompatibleDC DeleteDC VC6.0未实现,网上可以找到。 CMemDC类: #ifndef __MEMDC_H__ #define __MEMDC_H__ //Author:www.baojy.com class CMemDC :public CDC { CSize m_size; public: void BitRgn( CRgn &rgn, //目标区域 COLORREF crTrans // 透明色 ) { int i = 0,j=0; rgn.CreateRectRgn(0,0,0,0); while(i<m_size.cx) { j = 0; while(j<m_size.cy) { if(GetPixel(i,j) - crTrans) { CRgn r;

第15章 面向对象程序设计 15.1 15.2

时光毁灭记忆、已成空白 提交于 2019-12-04 11:34:34
1 #include <iostream> 2 3 using namespace std; 4 5 class Quote{ 6 public: 7 string isbn() const; 8 virtual double net_price(size_t n) const; 9 10 }; 11 12 class Bulk_quote : public Quote{ 13 public: 14 double net_price(size_t) const override ; 15 16 }; 17 18 int main() { 19 20 } 1、 派生类必须在其内部对所有 重新定义 的虚函数进行声明。   派生类经常(但不总是)覆盖它继承的虚函数。如果派生类没有覆盖其基类中的某个虚函数,则该虚函数的行为类似于其它的普通成员,派生类会直接继承它在基类中的版本。   派生类可以在这样的函数之前加上virtual关键字,但是并不是非得这么做。C++11新标准允许派生类显式地注明它将使用哪个成员函数改写基类的虚函数,具体措施是在该函数的形参列表之后加一个 overrride 关键字。 2、 在C++语言中,当我们使用基类的引用或指针调用一个虚函数时将发生动态绑定。 1 Quote item; 2 Bulk_quote bulk; 3 Quote *p = &item; 4 p

C++_学习笔记

旧时模样 提交于 2019-12-04 08:19:21
C++ 面向对象特征:封装——抽象——继承——多态 https://www.runoob.com/ <命名空间> —————————————————————————————————————————————————————————————————————————————————————————— #include <iostream> 1 using namespace std; 2 using std::变量; 3 std::变量; cout cin 定义: namespace spaceA{ int a = 10; namespace spaceB{ struct std{ int age ; } } } 使用: using namespace spaceA; using spaceA::a; spaceA::a; <bool增强> —————————————————————————————————————————————————————————————————————————————————————————— bool a = true ; 1 bool b = false; 0 sizeof(a) = 一个字节; <三目增强> ———————————————————————————————————————————————————————————————————————————

C++多态

南笙酒味 提交于 2019-12-03 21:59:29
C++多态 概念 C++中实现多态的条件 重写、同名隐藏与重载 多态实现原理 多态实现过程: 扩展 概念 多种形态,在完成某个行为时,当不同的对象去完成时会产生不同的形态。多态又分为动态多态和静态多态。 静态多态 (静态绑定,早绑定):编译器在编译时确定调用哪个函数(体现:函数重载、模板)。 动态多态 (动态绑定,晚绑定):编译时无法确定具体调用哪个函数,只有在代码运行时才知道具体应该调用哪个函数(体现:虚函数+重写)。 C++中实现多态的条件 1.在继承体系中,基类中必须要有 虚函数 ,派生类必须对基类进行 重写 。 2.必须 通过基类的指针或引用 去调用虚函数。 上面两个条件缺一不可。 但是也有两个例外: 协变 和 析构函数 。 协变 :返回值类型不同。基类虚函数返回基类的指针或引用,派生类虚函数返回派生类的指针或引用。基类虚函数也可以返回另一个继承体系基类的指针或引用,其派生类虚函数返回与基类返回的指针或引用相同继承体系的派生类指针或引用。 析构函数 :只要基类中的析构函数被virtual关键字修饰,如果其派生类的显式提供了自己的析构函数,则形成重写。 重写、同名隐藏与重载 重写 :派生类重写基类的虚函数,必须保证派生类虚函数与基类函数的原型(返回值类型、函数名字、参数列表)完全相同。 重载 :只要参数列表(参数个数,参数顺序,参数类型)不同,就构成重载,与返回值无关。

UE4的内存模型

不羁岁月 提交于 2019-12-03 14:37:16
转自: https://blog.csdn.net/noahzuo/article/details/73565259 UObject 和 FUObjectItem UE4运行的基本单位是 UObjet ,然而 UObject 针对于内存相关的东西都储存在结构体 FUObjectItem 中。有个全局变量 GUObjectArray ,可以通过以下代码来遍历所有的Objects: for (FRawObjectIterator It(false); It; ++It) { FUObjectItem* ObjectItem = *It; UObject* obj = ObjectItem->Object; } 可以通过如下代码来获得一个 UObject 对应的 ObjectItem FUObjectItem* ObjectItem = GUObjectArray.ObjectToObjectItem(Object); GUObjectArray中有几个函数可以通过索引和ObjectItem、Object的相互获取,对应的函数为IndexToObject、ObjectToIndex、IndexToObjectUnsafeForGC等。 GUObjectArray中所有的UObjectArray的分布是有顺序的——那些不会被GC的UObject,例如各StaticClass

继承知识点心得

匿名 (未验证) 提交于 2019-12-03 00:39:02
知识点 继承:在已有类的基础上创建新类的过程 一个 B 类继承A类,或称从类 A 派生类 B 类 A 称为基类(父类),类 B 称为派生类(子类) 类继承关系的语法形式 访问控制表示派生类对基类的继承方式,使用关键字: 不论种方式继承基类,派生类都不能直接使用基类的私有成员 派生类的生成过程经历了三个步骤: 在C++的继承机制中,派生类吸收基类中除构造函数和析构函数之外的全部成员。 通过在派生类中定义同名成员(包括成员函数和数据成员)来屏蔽(隐藏)在派生类中不起作用的部分基类成员。 仅仅继承基类的成员是不够的,需要在派生类中添加新成员,以保证派生类自身特殊属性和行为的实现。 #include<iostream> using namespace std ; class A { public : }; class B : public A { public : }; class C : public B { public : }; 定义一个基类person(不定义构造函数) 姓名、性别、年龄(访问权限设置为私有) 定义公有的成员函数set_p() 定义公有的成员函数display_p(),显示person的信息 再由基类派生出学生类(不定义构造函数,采用公有继承的方式) 增加学号、班级、专业和入学成绩 定义公有成员函数set_t() 定义成员函定义公有的成员函数display_s()

C++ 多态

匿名 (未验证) 提交于 2019-12-03 00:37:01
1.1 定义 1.2 规则 2 虚函数 2.1 定义 虚函数 是一种在基类定义为virtual的函数,并在一个或多个派生类中重新定义的函数。 2.2 格式 class 类名{ vitrual 函数声明 }; 2.3 规则 在基类中用virtual声明成员函数为虚函数。类外实现虚函数时,不必再加virtual; 在派生类中重新定义此函数称为覆写,要求函数名,返回类型,函数参数个数及类型全部匹配。并根据派生类的需要重新定义函数体; 当一个成员函数被声明为虚函数后,其派生类中完全相同的函数(显示的写出)也为虚函数。可以在其前面加上vitrual以示清晰; 定义一个基类对象的指针,并使其指向子类的对象,通过该指针调用虚函数,此时调用的就是指针变量指向对象的同名函数; 子类中覆写的函数,可以为任意访问类型,依子类需求决定; 只有类中的成员函数才能声明为虚函数,因为虚函数仅适用于与有继承关系的类对象,所以普通函数(包括友元函数)不能说明为虚函数; 静态成员函数不能是虚函数,因为静态成员函数不受限于某个对象; 内联函数不能是虚函数,因为内联函数不能再运行中动态确定位置; 构造函数不能是虚函数,析构函数可以是虚函数,而且通常声明为虚函数; 3 纯虚函数 3.1 格式 class 类名{ vitrual 函数声明=0; }; 3.2 规则 含有纯虚函数的类,称为 抽象基类 ,不可实例化

第五章实验

匿名 (未验证) 提交于 2019-12-03 00:34:01
一、实验目的和要求 1、掌握派生类的定义方法和派生类构造函数的定义方法。 2、掌握在不同继承方式的情况下,基类成员在派生类中的访问权限。 3、掌握在多继承方式的情况下,构造函数与析构函数的调用时机与顺序。 二、实验内容 1、调试下列程序,并在对程序进行修改后再调试,指出调试中的出错原因。 [cpp] view plain copy //sy5_1.cpp #include<iostream> using namespace class public void int int return public int class public public void int int return void public int int cout<< "A::a=" cout<< "B::b=" cout<< "A::a=" cout<< "B::b=" return 按下列要求对程序进行修改,然后调试,对出现的错误分析其原因。 (1)将派生类B的继承方式改为private时,会出现哪些错误和不正常现象?为什么? (2)将派生类B的继承方式改为protected时,会出现哪些错误和不正常现象?为什么? (3)将派生类B的继承方式恢复为public后,再将A中数据成员int型变量a的访问权限改为private时,会出现哪些错误和不正常现象?为什么? (4)派生类B的继承方式仍为public

习题5

匿名 (未验证) 提交于 2019-12-03 00:33:02
C++的两种联编方式为: 静态 联编和 动态 联编。 C++支持两种多态性,静态联编所支持的多态性被称为 编译时的多态性 、动态联编所支持的多态性被称为 运行时的多态性 。 重载函数在编译时表现出多态性,就是 静态 联编;而虚函数则在运行时表现出多态性是 动态 联编。 为了区分重载函数,把一个派生类中重定义基类的虚函数称为 覆盖 。 如果派生类与基类的虚函数仅仅返回类型不同,其余相同,则C++认为是 使用不恰当的虚函数 。 在构造函数和析构函数中调用虚函数时,采用 静态 联编。 纯虚函数的定义是在虚函数定义的基础上,再让函数等于 0 。 对于包含有纯虚函数的类被称为 抽象类 。 用关键字( A )标记的函数被称为虚函数。 A. virtual B. private C. public D. protected 在C++中,要实现动态联编,必须使用( D )调用虚函数 A. 类名 B. 派生类指针 C. 对象名 D. 基类指针 下列函数中,可以作为虚函数的是( BD )。 A. 普通函数 B. 非静态成员函数 C. 构造函数 D. 析构函数 在派生类中,重载一个虚函数时,要求函数名、参数的个数、参数的类型、参数的顺序和函数的返回值( B )。 A. 不同 B. 相同 C. 相容 D. 部分相同 使用虚函数保证了在通过一个基类类型的指针(含引用)调用一个虚函数时,C++系统对该调用进行