派生类

20200112

假装没事ソ 提交于 2020-01-22 17:28:38
课余关注复试信息 数据驱动法 ML 两周总结 吴恩达课程学完已经算比较好了,时间不够 保证CPP课程质量,尤其是项目相关知识要扎实 有余力可以继续学数学尤其是概率论课程,吴恩达课程相关代数知识也要补足 反向传播算法 参考深度学习课程相关部分 复习正则之前知识 重点是导数项推导,一定要懂,主要分为四部分 多元梯度下降 正规方程法 逻辑回归:结果类似多元梯度下降,注意hθ(x)不同 添加正则项 神经网络的正向与反向传播 逻辑回归偏导推导: 预习多态继承 多态: 虚函数的特点:在基类/派生类的定义与重载 非成员/静态/内联/构造/友元不能设为虚函数 派生类在定义时加基类列表/类派生列表 声明时不加 访问虚函数: 指针:非虚函数判断指针类型 虚函数判断所指对象类型 引用:类似指针 但一经声明则变量变化不会改变调用函数 构造与析构: 优先调用本类中函数,次而调用基类中函数,不会调用其他派生类函数 纯虚函数 只在基类中声明,且加**=0**,称为抽象基类,不能创建抽象基类对象 派生类必须各自给出定义 另一种抽象类方式:构造函数全部为protected 一般析构函数要定义为虚函数 重载:发生在同一个类中,函数名称相同,但参数的类型、个数、顺序不同。 覆盖:发生在父子类中,同名虚函数,参数亦完全相同。(同名数据成员也有隐藏) 隐藏:发生在父子类中,指的是在某些情况下

C++ primer 笔记(四)

北城余情 提交于 2020-01-21 08:45:49
第15章 object-oriented programming, OOP 面向对象编程 :数据抽象,继承,动态绑定。 通过基类的引用或指针调用虚函数时,发生动态绑定。 除了构造函数之外,任意非 static 成员函数都可以是虚函数。保留字virtual只在类内部的成员函数声明中出现,不能用在类定义体外部出现的函数定义上。 protected不能被外部访问,但可被派生类访问。 private继承:【Derived对象】不能调用Base中的任何东西;所有继承方式【Derived类】都还能调用Base类中的public和protected的东西(成员函数)。Derived类的Derived则都无法调用。 ----------------------------------------------------------- private继承 基类成员 private成员 public成员 protected成员 内部访问 不可访问 可访问 可访问 对象访问 不可访问 不可访问 不可访问 ------------------------------------------------------------ public继承 基类成员 private成员 public成员 protected成员 内部访问 不可访问 可访问 可访问 对象访问 不可访问 可访问 类定义中可访问,外部不可访问

C++Primer再学习(4)

心已入冬 提交于 2020-01-21 00:10:59
53.在c++中,通过基类的引用(或指针)调用虚函数时,发生动态绑定。用引用(或指针)调用的虚函数在运行时确定,被调用的函数时引用(或指针)所指对象的实际类型所定义。(延伸阅读《深度探索c++对象模型》) 54.接口继承:public派生类继承基类的接口(public成员),因此具有与积累相同的接口。 实现继承:使用private或protected派生的泪不继承基类的接口,也就是说此种继承方式对外提供的访问接口不包含基类的接口部分。 55.派生类可以恢复继承成员的访问级别,但不能使访问级别比基类中原来指定的更宽松或更严格。 用法:在派生类中的与基类访问级别相同的标号下使用 using Base:: 。此时 派生类对象不能转换为基类引用或指针。 56.友元关系不能继承。基类的友元对派生类的成员没有特殊访问权限。如果基类被授予友元关系,则只用基类具有特殊访问权限,该基类的派生类不能访问授予友元关系的类 57.要确定派生类到基类的转换是否可访问,可以考虑基类的public成员在派生类中是否提供对外访问,如果可以,则转换时可访问的。 58.派生类如果不定义自己的默认构造函数和复制控制成员,就将使用编译器的合成版本而不是基类的版本。 59.如果定义了复制构造函数和赋值操作符,则派生类的复制构造函数一般应显式使用基类复制构造函数初始化对象的基类部分。而赋值操作符也应显式调用基类赋值操作符

c++ 之private /protect/ public

牧云@^-^@ 提交于 2020-01-20 01:58:38
C++中public、protect、private的访问权限控制 访问权限 一个类的public成员变量、成员函数,可以通过类的成员函数、类的实例变量进行访问 一个类的protected成员变量、成员函数,无法通过类的实例变量进行访问。但是可以通过类的友元函数、友元类进行访问。 一个类的private成员变量、成员函数,无法通过类的实例变量进行访问。但是可以通过类的友元函数、友元类进行访问。 继承权限 public继承 派生类通过public继承,基类的各种权限不变 。 派生类的成员函数,可以访问基类的public成员、protected成员,但是无法访问基类的private成员。 派生类的实例变量,可以访问基类的public成员,但是无法访问protected、private成员,仿佛基类的成员之间加到了派生类一般。 可以将public继承看成派生类将基类的public,protected成员囊括到派生类,但是不包括private成员。 protected继承 派生类通过protected继承,基类的public成员在派生类中的权限变成了protected 。protected和private不变。 派生类的成员函数,可以访问基类的public成员、protected成员,但是无法访问基类的private成员。 派生类的实例变量,无法访问基类的任何成员

自考新教材-p233

吃可爱长大的小学妹 提交于 2020-01-12 19:32:01
基类与派生类之间的互相转换,使用指针的情况 源程序: /*--> */ /*--> */ #include<iostream> using namespace std; class CBase { protected: int n; public: CBase(int i):n(i){} void Print() { cout<<"CBase:n="<<n<<endl; } }; class CDerived:public CBase { public: int v; CDerived(int i):CBase(i),v(2*i){} void Func(){}; void Print() { cout<<"CDerived:n="<<n<<endl; cout<<"CDerived:v="<<v<<endl; } }; int main() { CDerived objDerived(3); CBase objBase(5); CBase *pBase = &objDerived; CDerived *pDerived; pDerived = &objDerived; cout<<"使用派生类指针调用函数"<<endl; pDerived->Print(); pBase=pDerived; cout<<"使用基类指针调用函数"<<endl; pBase->Print(); /

C++之继承与派生(3)

橙三吉。 提交于 2020-01-10 13:57:27
  大家都知道C#和C++重要的区别之一就是,C#支持单一继承和多接口继承,而C++则允许多继承。至于哪一个比较好,在这里就不去评价了。今天所要说的重点内容就是C++的多重继承以及虚基类。   1.前一节我介绍了有关单继承的内容,实际上,一个派生类可能会继承于两个或多了基类,那么这样的派生方法称为多基派生或多重继承。它声明的一般格式:   class 派生类名:继承方式1 基类名1, 继承方式2 基类名2, 继承方式3 基类名3, ...,继承方式n 基类名n   {     派生类新增的数据成员和成员函数;   } 在多重继承中,公有继承、保护继承以及私有继承对于基类成员在派生类中的访问属性与单继承的规则是相同的。同样的多重继承派生类的构造函数和析构函数又是如何定义呢?一般形式:   派生类名(参数总表):基类名1(参数子表1), 基类名2(参数子表2),...,基类名n(参数子表n)   {     派生类新增成员的初始化语句;   } 与单继承派生类构造函数一样,多继承下的派生类构造函数必须同时负责该派生类的所有基类构造函数的参数传递。且构造函数和析构函数的调用顺序和单继承是一样的(可参考 C++之继承与派生(2) ),先调用基类构造函数,再调用对象成员的构造函数,最后调用派生类的构造函数。那么处于同一层次的各个基类构造函数的调用顺序是取决于声明派生类时所指定的各个基类的顺序

C++之继承与派生(1)

核能气质少年 提交于 2020-01-09 16:57:39
C++之继承与派生(1) http://www.cnblogs.com/CaiNiaoZJ/archive/2011/08/08/2130817.html 继承是面向对象程序设计中的重要特性,是软件复用的一种形式。其实继承和派生就是同一种概念的不同说法罢了,通常我们说子类继承父类,父类派生出子类。说实话,学习和了解了C++的继承与派生后,发现我对面向对象中的继承与派生有了更深刻的理解。在更加深入了解C++关于继承方面的知识之前,我想先讲一下C++中派生与继承的基本概念,它是之后学习派生类的构造与析构,以及多重继承等的基础。   1.派生类的声明   声明一个派生类的一般格式:   class 派生类名:[继承方式] 基类名   {      派生类新增的数据成员和成员函数   };   对于上述的格式主要想说一下继承方式的作用,它主要是规定如何访问从基类继承的成员。它可以有关键字private、protected和public来分别表示私有继承、保护继承和公有继承。如果不显示继承方式关键字,系统默认为私有继承。继承方式指定类派生类成员以及类外对象对于从基类继承来的成员的访问权限。   2.对于不同的继承方式,基类成员在派生类中的访问属性也是不同的,以下表,列出了基类成员在派生类中的访问属性(我想以一张表格的方式来说明,既显而易见,又简单易懂):   3.最后说一下

.NET 指南:被保护的成员

醉酒当歌 提交于 2020-01-09 03:43:05
未被密封的类中的被保护成员能够给予开发者一种方式来定制类的行为。例如,用来触发事件的方法经常以被保护的方式而被定义并且允许派生类在事件被触发之前或在事件已触发之后来提供附加的处理。 重要提示:术语 "被保护的" 并不表示已经完成了任何安全性检查或者通过了调用者的验证。实际上,被保护的成员能够简单地通过定义这个类型声明的一个派生类而被访问。 考虑为高级定制而使用被保护的成员。被保护的成员是在不使公共接口变得复杂的情况下而提供高级定制的一种主要方式。 出于安全、文档,以及兼容性分析等目的,把未被密封的类中的被保护成员视为是公共的。并且任何代码都能够通过子集来访问到被保护的成员。 来源: https://www.cnblogs.com/Laeb/archive/2007/02/02/638264.html

[C++]C++面试知识总结

只谈情不闲聊 提交于 2020-01-08 23:40:04
1.程序运行知识 1.1 内存布局和分配方式 C程序的内存布局如下: 静态存储区:存储全局变量和static变量,通常在程序编译期间已经分配好了。 BSS段:存放未初始化的static变量和全局变量 Data段:存放初始化过的static变量和全局变量 Text段:存储程序的二进制代码,程序代码区。   堆:程序运行时通过malloc申请的内存区存放在堆中,需要使用free来释放该内存空间,生存期在malloc和free之间。 栈:执行函数时,函数的局部变量存储在栈中,执行结束后自动释放该内存区域,栈内存分配运算内置与处理器指令集中。 C++程序的内存布局与C程序布局类似,区别是C++不再区分全局变量和静态变量是否已经初始化,全部存储在静态存储区;另外堆中存放new/delete申请释放的资源,而malloc和free申请的资源存放在自由存储区。 1.2 内存溢出原因 栈溢出:越界访问造成,例如局部变量数组越界访问或者函数内局部变量使用过多,超出了操作系统为该进程分配的栈的大小,还有递归函数层次过多超过了栈大小。 堆溢出:程序申请了资源但忘记释放该资源,造成内存泄露,累积泄露内存过多会造成内存溢出。 1.3 内存泄露和检测 C++内存泄漏检测内存泄露是指程序中动态分配了内存,但是在程序结束时没有释放这部分内存,从而造成那一部分内存不可用的情况。 动态内存泄露检测:检查new

java 内部类

馋奶兔 提交于 2020-01-07 00:57:00
1.成员内部类:应用率低: (1)类中套类,外面的称为Outer外部类,里面的称为Inner内部类 (2)内部类通常只服务于外部类,对外不具备可见性。 (3)内部类对象通常是在外部类中创建。 (4)内部类中可以直接访问外部类成员(包括私有的) 内部类中有个隐私的引用指向了创建它的外部类对象 eg:外部类名.this 2.匿名内部类 : (1)若想创建一个类(派生类)的对象,并且对象只被创建一次,此时该类不必命名,称为匿名内部类。 (2)匿名内部类若想访问外部的变量,该变量必须是final的 --------在JDK1.8之前有这样的要求。 package demo; //匿名内部类的演示: public class NstInnerClassDemo { public static void main(String[] args) { /* * 1.创建了Coo的一个派生类,但是没有名字 * 2.为该派生类创建了一个对象,名为o1 * Doo o1=new Doo(); * 3.大括号中的为派生类的类体。 */ Coo o1=new Coo(){ }; final int num=5; /* * 1.创建了Doo的一个派生类,但是没有名字 * 2.为该派生类创建了一个对象,名为o3 * 3.大括号中的为派生类的类体。 */ Doo o3=new Doo(){ void show()