• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++ 的三种访问权限与三种继承方式

C++ 的三种访问权限与三种继承方式

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了c++继承方式,c++,c++软件下载,c++视频教程,c++6.0中文版下载等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

三种访问权限

我们知道C++中的类,有三种访问权限(也称作访问控制),它们分别是public、protected、private。要理解它们其实也很容易,看下面了一个例子。

父类:

class Person
{
public:
Person(const string& name, int age) : m_name(name), m_age(age)
{
}
void ShowInfo()
{
cout << "姓名:" << m_name << endl;
cout << "年龄:" << m_age << endl;
}
protected:
string m_name; //姓名
private:
int m_age; //年龄
};
class Person
{
public:
Person(const string& name, int age) : m_name(name), m_age(age)
{
}
void ShowInfo()
{
cout << "姓名:" << m_name << endl;
cout << "年龄:" << m_age << endl;
}
protected:
string m_name; //姓名
private:
int m_age; //年龄
};
</div>

子类:

class Teacher : public Person
{
public:
Teacher(const string& name, int age, const string& title)
: Person(name, age), m_title(title)
{
}
void ShowTeacherInfo()
{
ShowInfo(); //正确,public属性子类可见
cout << "姓名:" << m_name << endl; //正确,protected属性子类可见
cout << "年龄:" << m_age << endl; //错误,private属性子类不可见
cout << "职称:" << m_title << endl; //正确,本类中可见自己的所有成员
}
private:
string m_title; //职称
};
class Teacher : public Person
{
public:
Teacher(const string& name, int age, const string& title)
: Person(name, age), m_title(title)
{
}
void ShowTeacherInfo()
{
ShowInfo(); //正确,public属性子类可见
cout << "姓名:" << m_name << endl; //正确,protected属性子类可见
cout << "年龄:" << m_age << endl; //错误,private属性子类不可见
cout << "职称:" << m_title << endl; //正确,本类中可见自己的所有成员
}
private:
string m_title; //职称
};
</div>

调用方法:

void test()
{
Person person("张三", 22);
person.ShowInfo(); //public属性,对外部可见
cout << person.m_name << endl; //protected属性,对外部不可见
cout << person.m_age << endl; //private属性,对外部不可见
}
void test()
{
Person person("张三", 22);
person.ShowInfo(); //public属性,对外部可见
cout << person.m_name << endl; //protected属性,对外部不可见
cout << person.m_age << endl; //private属性,对外部不可见
}
</div>

总结

我们对C++类三种方式控制权限总结如下,这与Java中的三种对应的访问权限是一样的。

qq%e6%88%aa%e5%9b%be20161104113813

三种继承方式

C++中继承的方式还有多种,也分别都用public、protected、private表示。这与Java不一样,Java只有继承的概念,默认是public继承的。

1. 三种继承方式不影响子类对父类的访问权限,子类对父类只看父类的访问控制权。

如下面三种继承方式都能访问父类中的public和protected成员。

class Teacher : /*public*/ /*protected*/ private Person
{
public:
Teacher(const string& name, int age, const string& title)
: Person(name, age), m_title(title)
{
}
void ShowTeacherInfo()
{
ShowInfo(); //正确,public属性子类可见
cout << "姓名:" << m_name << endl; //正确,protected属性子类可见
//cout << "年龄:" << m_age << endl; //错误,private属性子类不可见
cout << "职称:" << m_title << endl; //正确,本类中可见自己的所有成员
}
private:
string m_title; //职称
};
class Teacher : /*public*/ /*protected*/ private Person
{
public:
Teacher(const string& name, int age, const string& title)
: Person(name, age), m_title(title)
{
}
void ShowTeacherInfo()
{
ShowInfo(); //正确,public属性子类可见
cout << "姓名:" << m_name << endl; //正确,protected属性子类可见
//cout << "年龄:" << m_age << endl; //错误,private属性子类不可见
cout << "职称:" << m_title << endl; //正确,本类中可见自己的所有成员
}
private:
string m_title; //职称
};
</div>

2. 继承方式是为了控制子类(也称派生类)的调用方(也叫用户)对父类(也称基类)的访问权限。

public继承

class Teacher : public Person
{
public:
Teacher(const string& name, int age, const string& title)
: Person(name, age), m_title(title)
{
}
void ShowTeacherInfo()
{
ShowInfo(); //正确,public属性子类可见
cout << "职称:" << m_title << endl; //正确,本类中可见自己的所有成员
}
private:
string m_title; //职称
};
class Teacher : public Person
{
public:
Teacher(const string& name, int age, const string& title)
: Person(name, age), m_title(title)
{
}
void ShowTeacherInfo()
{
ShowInfo(); //正确,public属性子类可见
cout << "职称:" << m_title << endl; //正确,本类中可见自己的所有成员
}
private:
string m_title; //职称
};
void TestPublic()
{
Teacher teacher("李四", 35, "副教授");
teacher.ShowInfo();
cout << endl;
teacher.ShowTeacherInfo();
}
void TestPublic()
{
Teacher teacher("李四", 35, "副教授");
teacher.ShowInfo();
cout << endl;
teacher.ShowTeacherInfo();
}
</div>

结果:

姓名:李四
年龄:35

姓名:李四
年龄:35
职称:副教授

private继承:

class Teacher : private Person
{
public:
Teacher(const string& name, int age, const string& title)
: Person(name, age), m_title(title)
{
}
void ShowTeacherInfo()
{
ShowInfo(); //正确,public属性子类可见
cout << "职称:" << m_title << endl; //正确,本类中可见自己的所有成员
}
private:
string m_title; //职称
};
class Teacher : private Person
{
public:
Teacher(const string& name, int age, const string& title)
: Person(name, age), m_title(title)
{
}
void ShowTeacherInfo()
{
ShowInfo(); //正确,public属性子类可见
cout << "职称:" << m_title << endl; //正确,本类中可见自己的所有成员
}
private:
string m_title; //职称
};
void TestPrivate()
{
Teacher teacher("李四", 35, "副教授");
teacher.ShowInfo(); //错误,因为Teacher采用了private的继承方式,外部不可访问。
cout << endl;
teacher.ShowTeacherInfo();
}
void TestPrivate()
{
Teacher teacher("李四", 35, "副教授");
teacher.ShowInfo(); //错误,因为Teacher采用了private的继承方式,外部不可访问。
cout << endl;
teacher.ShowTeacherInfo();
}
</div>

3. public、protected、private三种继承方式,相当于把父类的public访问权限在子类中变成了对应的权限。

如protected继承,把父类中的public成员在本类中变成了protected的访问控制权限;private继承,把父类的public成员和protected成员在本类中变成了private访问控制权。

protected继承:

class Teacher : protected Person
{
public:
Teacher(const string& name, int age, const string& title)
: Person(name, age), m_title(title)
{
}
void ShowTeacherInfo()
{
ShowInfo(); //正确,public属性子类可见
cout << "职称:" << m_title << endl; //正确,本类中可见自己的所有成员
}
private:
string m_title; //职称
};
class Teacher : protected Person
{
public:
Teacher(const string& name, int age, const string& title)
: Person(name, age), m_title(title)
{
}
void ShowTeacherInfo()
{
ShowInfo(); //正确,public属性子类可见
cout << "职称:" << m_title << endl; //正确,本类中可见自己的所有成员
}
private:
string m_title; //职称
};
void TestProtected()
{
Teacher teacher("李四", 35, "副教授");
teacher.ShowInfo(); //错误,基类Person的ShowInfo此时对Teacher相当于protect



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • C++ 的三种访问权限与三种继承方式

相关文章

  • 2017-05-28用C++实现一个链式栈的实例代码
  • 2017-05-28Linux C 获取进程退出值的实现代码
  • 2017-05-28c++ 尽量不要使用#define 而是用const、enum、inline替换。
  • 2017-05-28C++实现从输入中读取字符串
  • 2017-05-28浅谈C++对象组合
  • 2017-05-28C语言实现单链表逆序与逆序输出实例
  • 2017-05-28实例详解C/C++中extern关键字
  • 2017-05-28VC++实现程序开机启动运行的方法
  • 2017-05-28C++ vector的用法小结
  • 2017-05-28C语言学生管理系统源码分享

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Eclipse对printf()不能输出到控制台的快速解决方法
    • 基于C语言char与unsigned char的区别介绍
    • C/C++杂记 虚函数的实现的基本原理(图文)
    • 详解C语言 三大循环 四大跳转 和判断语句
    • C++你最好不要做的几点小结
    • 简单分析C++指针的操作和运算
    • 解析C++编程中异常相关的堆栈展开和throw()异常规范
    • c语言全盘搜索指定文件的实例代码
    • C语言实现冒泡排序算法
    • C/C++获取目录下的文件列表信息

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有