• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
heremei
博客园    首页    新随笔    联系   管理    订阅  订阅

【Heremei】 C++ - 面向对象 - 关于类的访问修饰符以及继承的问题

今天和Lyk Dalao一起学习了C++面向对象的知识,我觉得有一部分需要明确一下。

类的成员访问修饰符有以下三种:public,protected,private
public:公有,在任何一个位置都可以访问的成员
protected:外部无法访问,该类和其子类可访问
private:外部和子类都无法访问,只有该类可以访问

在继承中的访问修饰符:
public会把父类的所有东西原样继承下来
protected会额外把public的都变成protected
private会把所有的都变成private
(所谓的变成,都是在子类中继承过来后访问修饰符的变化)

要注意的是,在父类中的private成员,子类继承时无论用什么标签都是无法访问的。

但不管是外部无法访问,还是子类里无法访问的情况,都可以通过调用父类里的公有函数间接访问私有(或受保护的)成员,比如以下代码:

#include<iostream>
#include<string>
using namespace std;
class object{
	protected:
		string a="Lyk AK IOI";
	public:
		void print(){
			cout<<a;
		}
};
int main(){
	object obj;
	obj.print();
	return 0;
}

这是在外部通过调用print这个公有函数来访问a这个受保护的变量。

关于多继承:
多继承如果几个父类里有同名对象,会报错提示:ambiguous,就是你没说清楚是啥。但只要用::修饰就可以正确调用,比如:

#include<iostream>
#include<string>
using namespace std;
class zht{
	public:
		string a="Zht AK IOI";
};
class lyk{
	public:
		string a="Lyk AK IOI";
};
class lyd:public zht,public lyk{
	public:
		void zhtsay(){
			cout<<zht::a<<endl;
		}
		void lyksay(){
			cout<<lyk::a<<endl;
		}
};
int main(){
	lyd lyd1;
	lyd1.lyksay();
	lyd1.zhtsay();
	return 0;
}
内容可以为空
posted on 2021-05-26 21:46  heremei  阅读(121)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3