c++ public protected private 继承
1:访问控制
1.1 public 这类型成员可以被类本身函数访问,也可以被外部创建的类对象调用。子类对象与子类内部可以访问
1.2 protected类型成员,只能被类本身函数访问。外部创建的类对象没有访问权限。子类对象没有访问权限,子类内部可以访问
1.3 private类型成员,只能被类本身函数访问,外部创建的类对象没有访问权限。子类对象和子类内部都没有访问权限
class TestObject{
public:
void Function();
void TestPublic();
protected:
void TestProtected();
private:
void TestPrivate();
};
void TestObject::Function(){
TestPublic();
TestProtected();
TestPrivate();
}
int main(){
TestObject obj;
obj.TestPublic();//yes
obj.TestProtected();//error
obj.TestPrivate();//error
}
2:继承关系的访问控制
2.1 public继承。public继承使子类顺延父类的访问控制属性,即成员保持父类的控制属性,这样在子类中的成员访问控制同父类的一样
class Base
{
public:
Base(void);
~Base(void);
void TestPublic();
protected:
void TestProtected();
private:
void TestPrivate();
}; void Base::TestPublic(){
cout<<"TestPublic"<<endl;
} void Base::TestProtected(){
cout<<"TestProtected"<<endl;
} void Base::TestPrivate(){
cout<<"TestPrivate"<<endl;
} class Child :
public Base
{
public:
Child ();
}; Child ::Child (){
child.TestPublic();//yes
TestProtected();//yes
TestPrivate();//error
} int _tmain(int argc, _TCHAR* argv[])
{
Child child;
child.TestPublic();//yes
//child.TestProtected();//error
//child.TestPrivate();//error
return ;
}
2.2 protected继承,将父类public和protected属性的成员属性顺延到子类来后变成protected属性。protected属性是可以提供给子类在内部访问的。
如上代码,如果改为protected继承。则内部访问保持和public继承的不变,而在外部,由于父类public属性被更改为protected的属性,则在外部创建的子类对象没有了访问权限。
class Child :protectedBase{
}
Child ::Child (){
child.TestPublic();//yes
TestProtected();//yes
TestPrivate();//error
}
int _tmain(int argc, _TCHAR* argv[])
{
Child child;
//child.TestPublic();//error
//child.TestProtected();//error
//child.TestPrivate();//error
return ;
}
2.3 private继承。这种继承方式中断了后续子类对当前类的父类的所有访问权限,在该种继承方式下,会将父类public和protected属性顺延成private属性。这样,几时后面子类再次继承,都没有了对当前父类的成员的访问权限。
class Child :privateBase{
}
Child ::Child (){
child.TestPublic();//yes
TestProtected();//yes
TestPrivate();//error
}
class Mini :public Child{
public:
Mini();
}
Mini::Mini(){
TestPublic();//error
TestProtected();//error
TestPrivate();//error
}
int _tmain(int argc, _TCHAR* argv[])
{
Mini mini;
//mini.TestPublic();//error
//mini.TestProtected();//error
//mini.TestPrivate();//error
return ;
}
c++ public protected private 继承的更多相关文章
- 7,C++ public, protected, private 继承的区别
在某处看到一张图,简单明了的说明了三者的关系,很是佩服,遂记录下来. //公有继承 对象访问 成员访问 public --> public Y Y protected --> protec ...
- C++中public,protected,private派生类继承问题和访问权限问题
C++中public,protected,private派生类继承问题和访问权限问题 当一个子类从父类继承时,父类的所有成员成为子类的成员,此时对父类成员的访问状态由继承时使用的继承限定符决定. 1. ...
- 【转】C++易混知识点5:实例讲解Public Protected Private作用域,继承的区别和用意
大学生涯,涉及到类的作用域,继承都是用的public 共有继承,当时也没想那么多,觉得共有继承多方便,多简单,反正没有太多的限制,不管是类的成员或者是基类的成员函数都可以访问.没有深究.其实这里面真是 ...
- C++:继承访问属性(public/protected/private)
• 公有继承(public) 公有继承在C++中是最常用的一种继承方式,我们先来看一个示例: #include<iostream> using namespace std; class F ...
- 【转载】C++中public,protected,private访问
第一:private, public, protected 访问标号的访问范围. 假如我们约定: 类内部-----指的是当前类类型的定义中,以及其成员函数的声明和定义中: 类外部-----指的是不在当 ...
- JAVA修饰符类型(public,protected,private,friendly)
转自:http://www.cnblogs.com/webapplee/p/3771708.html JAVA修饰符类型(public,protected,private,friendly) publ ...
- C++ 类访问控制(public/protected/private)
第一:private, public, protected 访问标号的访问范围. private:只能由1.该类中的函数.2.其友元函数访问. 不能被任何其他访问,该类的对象也不能访问. protec ...
- JAVA类型修饰符(public,protected,private,friendly)
JAVA类型修饰符(public,protected,private,friendly) public的类.类属变量及方法.包内及包外的不论什么类均能够訪问:protected的类.类属变量及方法,包 ...
- 快速理解类的访问控制(public,protected,private)
接触过面向对象编程的朋友们都知道类中的访问控制符无非有三个,public, protected, private. 理解他就先从期望他达到的效果先说吧 Public: 使成员对于整个程序内(类内类外) ...
随机推荐
- (转)轻量级C语言实现的minixml解析库入门教程
svn上的minixml源码下载:svn co http://svn.msweet.org/mxml/tags/release-2.7/ 按照下载回来的源代码进行编译和安装.本教程只针对新手做一个引导 ...
- BZOJ5302: [Haoi2018]奇怪的背包
BZOJ5302: [Haoi2018]奇怪的背包 https://lydsy.com/JudgeOnline/problem.php?id=5302 分析: 方程\(\sum\limits_{i=1 ...
- ACM学习历程—HDU5667 Sequence(数论 && 矩阵乘法 && 快速幂)
http://acm.hdu.edu.cn/showproblem.php?pid=5667 这题的关键是处理指数,因为最后结果是a^t这种的,主要是如何计算t. 发现t是一个递推式,t(n) = c ...
- Python函数-input()
input([prompt]) 如果[prompt]是存在的,它被写入标准输出中没有换行.然后函数读取输入,将其转换为一个字符串,然后返回. >>> s = input('--> ...
- linux 内核移植和根文件系统的制作【转载】
原文地址:http://www.cnblogs.com/hnrainll/archive/2011/06/09/2076214.html 1.1 Linux内核基础知识 在动手进行Linux内核移植之 ...
- bootstrap 多色表格
有时候需要用到多色显示不同类型的表格 用bootstrap的样式即可 <tr class="active"> <tr class="success&qu ...
- 一般处理程序+html 的CRUD
using Console_Core.BLL; using Console_Core.Common; using Console_Core.Model; using System; using Sys ...
- (转)Dynamic Web project转成Maven项目
本文转载自:http://my.oschina.net/twosnail/blog/369125 1.新建Dynamic Web Project 1.File -> New -> Othe ...
- JavaScript 中对小数取整的常用函数
常见的js截取小数的方法 1.丢弃小数部分,保留整数部分 js:parseInt(7/2) 2.向上取整,有小数就整数部分加1 js: Math.ceil(7/2) 3,四舍五入. js: Math. ...
- iOS下拉图片放大
效果图 开始简单的代码过程 其实思路很简单 就是 让tableView偏移 一图片的高度,然后在把图片添加到tableView中,然后再监听didScrollView,在里面改变图片的frame - ...