C++ 继承/派生、访问属性、构造函数
1.子类继承父类的继承方式:public,private,protected,不写则默认为private;
2.子类会继承父类的全部成员(除了构造函数、析构函数,虽然析构函数有virtual,但是不是继承的意思),全盘接受,没得选,不能只继承一部分,而不继承另一部分,这样就可能造成数据冗余,在继承时可能会继承了一大堆没用的东西,这个问题目前的c++也无法解决,所以继承时父类的选择要谨慎。但是,可以改变继承的成员在子类中的访问属性,即可能全盘继承了父类的成员之后访问不了!!!
3.
父类中的访问属性 | 继承方式 | 子类中的访问属性 |
private | public/protected/private | 不可访问 |
public | public | public |
public | protected | protected |
public | private | private |
protected | public | protected |
protected | protected | protected |
protected | private | private |
4.protected成员在本类内相当于private,但是在子类中就不一样了,子类中可以访问父类的protected成员。若某类声明了protected成员,就说明这个类可能要当作父类,是为了继承做准备的。
5.类外可访问类的public成员,不可访问类的private和protected成员。
6.构造函数是为了初始化类的数据成员,可以不自己定义,这样系统就会自动设置默认构造函数,也可以自己定义。因为构造函数不能继承,所以子类在初始化时要同时初始化父类,一般是在定义子类构造函数时调用父类的构造函数,声明子类构造函数时不用加上父类构造函数。
形式:子类构造函数名(总参数表,即所有参数):父类构造函数名(参数表)
{
//子类新增成员初始化
}
e.g.student1(int n,string nam,char s,int a,string ad):student(n,nam,s)
{
//新增成员初始化
}
上述student为父类,student1为子类。
这种方式其实和构造函数的初始化列表是一样的,如
box(int h,int w,int l):height(h),width(w),length(len) { //新增成员初始化 }
其实就是利用初始化表调用父类的构造函数,也可以将两者结合起来,即既有初始化表,也有父类构造函数调用,如
student1(int n,string nam,char s,int a,string ad):student(n,nam,s),age(a),addr(ad) { }
若一个类的数据成员中包括类对象,即对象中的对象,则可用如下方式定义:
student1(int n,string nam,int n1,string nam1,string ad):student(n,nam),monitor(n1,nam1)
{
...
}
上述monitor为student1中的对象(student类型的)。
7.子类和父类的转换:可以把子类的对象赋值给父类的对象,而不能反过来(没有指针的事)。
指向父类对象的指针也可以指向子类,但是只能访问子类中从父类继承的部分,不能访问子类自己新增的部分。若父类指针指向子类,则指针类型自动转换,由子类转为父类(e.g. father* p=new son;),这样,指针指向的就是子类中的父类部分。
8.类的组合:一个类中的数据成员包含另一个类的对象,类的组合是横向的,说明了是否拥有某一属性。类的继承是纵向的,说明了是否属于某一事物。组合和继承是软件重用的重要方式。
C++ 继承/派生、访问属性、构造函数的更多相关文章
- c++ 单继承派生类的构造函数
1.派生类的构造函数: #include <iostream> #include<string> using namespace std; class Student//声明基 ...
- C++学习之路—继承与派生(一):基本概念与基类成员的访问属性
(本文根据<c++程序设计>(谭浩强)总结而成,整理者:华科小涛@http://www.cnblogs.com/hust-ghtao,转载请注明) 1 基本思想与概念 在传统的程序设计 ...
- 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成员)
[源码下载] 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成 ...
- C++:调整基类成员在派生类中的访问属性的其他方法(同名成员和访问声明)
4.3 调整基类成员在派生类中的访问属性的其他方法 4.3.1 同名函数 在定义派生类的时候,C++语言允许在派生类中说明的成员与基类中的成员名字相同,也就是 说,派生类可以重新说明与基类成员同名的成 ...
- 3.3 C++改变基类成员在派生类中的访问属性
参考:http://www.weixueyuan.net/view/6360.html 总结: 使用using声明可以改变基类成员在派生类中的访问属性. private: using book::se ...
- C++ 派生类成员的访问属性
派生类成员的访问属性: C++继承方式总共分为以下几种:public.private.protected三种(它们直接影响到派生类的成员.及其对象对基类成员访问的规则).(1)public(公有继承) ...
- C++:继承访问属性(public/protected/private)
• 公有继承(public) 公有继承在C++中是最常用的一种继承方式,我们先来看一个示例: #include<iostream> using namespace std; class F ...
- C++学习之路—继承与派生(二):派生类的构造函数与析构函数
(根据<C++程序设计>(谭浩强)整理,整理者:华科小涛,@http://www.cnblogs.com/hust-ghtao转载请注明) 由于基类的构造函数和析构函数是不能被继承的,所以 ...
- c/c++ 继承与多态 继承时如何改变个别成员的访问属性
问题1:若类B以private的方式继承类A,但还想让类A的某些个别成员,保持public或者protected的访问属性,这时应该怎么办? 使用using,去改变访问属性. #include < ...
随机推荐
- Setting Up FastCGI Proxying
http://nginx.org/en/docs/beginners_guide.html
- B. Flag of Berland
B. Flag of Berland time limit per test 1 second memory limit per test 256 megabytes input standard i ...
- ubuntu截图工具及GNOME的使用及类似qq截图快捷键
1:了解gnome参数 gnome-screenshot -h
- ATan2与ATan的区别
相比较ATan,ATan2究竟有什么不同?本篇介绍一下ATan2的用法及使用条件. 对于tan(θ) = y / x: θ = ATan(y / x)求出的θ取值范围是[-PI/2, PI/2]. θ ...
- casperjs在拆分文件后的中文乱码问题的解决
windows环境. capserjs的中文乱码使用phantom.outputEncoding="GBK";即可解决. 但当我们脚本很大,需要拆分时(参考http://docs. ...
- js用法2
1,网站cookie document.cookie 2, Web Storage相当于cookie,当存储量大于cookie localStorage 存储格式都是字符串 有效期,清空缓存前,永远存 ...
- sqlserver游标使用误区
在使用游标出现逻辑错误时,查阅资料,只有改掉while中的游标取值在while循环最后,没有说明while以前会出现的错误,而且没有具体说明原因,今天在工作中解决了这个问题,写了这个博客,希望对使用游 ...
- android 代码优化:关闭输出日志
android关闭日志 我们在开发时,经常会输出各种日志来debug代码.但是等到应用发布的apk运行时不希望它输出日志. 关闭输出日志Log.v(),Log.i(),Log.w(),Log.v(), ...
- 【HDU 2196】 Computer
[题目链接] 点击打开链接 [算法] 我们知道,一棵树上离某个节点最远的节点,可能是经过它的祖先,再到那个祖先的某个孩子,或者,是它的那颗子树中,离它最远的一个节点,就不难想到以下算法 : 第一遍DF ...
- gcc编译系统
一. C语言编译过程 C语言的编译过程可分为四个阶段: 1.预处理(Preprocessing) 对源程序中的伪指令(即以#开头的指令)和特殊符号进行处理的过程. 伪指令包括:1)宏定义指令: 2)条 ...