C++类访问控制--public,protected,private的使用(未完)

参考代码

#include<iostream>
#include<cstdio>
using namespace std;
class father {
   int id;
protected:
	int tt;
public:
	father():id(3){}
	void print() {printf("this is father public function %d\n",id);}
	void changeId() {
		id=10;
		printf("改变id的值为10\n");
	}
	friend void change(father& f);  //友元函数可以让类外的函数访问类中成员。
};
class child : protected father {
public:
	void play() {
		father::print();
		//father::id=3; //基类私有成员,其派生类无法直接访问
		father::tt=2;   //基类保护成员,其派生类可以直接访问

	}
	void print() {printf("this is child function\n");}
};
void change(father& f) {
	f.id=10;
	f.tt=3;
}
int main()
{
	child c;
	//c.id=3; //私有成员只有该类中的函数和友元函数可以访问
	c.print();
	c.play();
	//c.tt=2; //保护成员和私有成类似,只有一点不同,基类中的保护成员对其派生类具有可见性。
	father f;
	change(f);
	f.print();
}

总结:

当private,public,protected单纯的作为一个类中的成员权限设置时:

private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问.

protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问

public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问

当private,public,protected作为继承方式时:

对于公有继承方式: 

(1)父类的public成员成为子类的public成员,允许类以外的代码访问这些成员;

(2)父类的private成员仍旧是父类的private成员,子类成员不可以访问这些成员;

(3)父类的protected成员成为子类的protected成员,只允许子类成员访问;

(1) 基类成员对其对象的可见性:

公有成员可见,其他不可见。这里保护成员同于私有成员。

(2) 基类成员对派生类的可见性:

公有成员和保护成员可见,而私有成员不可见。这里保护成员同于公有成员。

(3) 基类成员对派生类对象的可见性:

公有成员可见,其他成员不可见。

所以,在公有继承时,派生类的对象可以访问基类中的公有成员;派生类的成员函数可以访问基类中的公有成员和保护成员。这里,一定要区分清楚派生类的对象和派生类中的成员函数对基类的访问是不同的。

对于私有继承方式: 

(1)父类的public成员成为子类的private成员,只允许子类成员访问;

(2)父类的private成员仍旧是父类的private成员,子类成员不可以访问这些成员;

(3)父类的protected成员成为子类的private成员,只允许子类成员访问;

(1) 基类成员对其对象的可见性:

公有成员可见,其他成员不可见。

(2) 基类成员对派生类的可见性:

公有成员和保护成员是可见的,而私有成员是不可见的。

(3) 基类成员对派生类对象的可见性:

所有成员都是不可见的。

所以,在私有继承时,基类的成员只能由直接派生类访问,而无法再往下继承。

对于保护继承方式:

(1)父类的public成员成为子类的protected成员,只允许子类成员访问;

(2)父类的private成员仍旧是父类的private成员,子类成员不可以访问这些成员;

(3)父类的public成员成为子类的protected成员,只允许子类成员访问;

这种继承方式与私有继承方式的情况相同。两者的区别仅在于对派生类的成员而言,对基类成员有不同的可见性。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 18:27:28

C++类访问控制--public,protected,private的使用(未完)的相关文章

访问控制public/protected/private的区别

Java支持四种不同的访问权限: 修饰符 说明 public 共有的,对所有类可见. protected 受保护的,对同一包内的类和所有子类可见. private 私有的,在同一类内可见. 默认的 在同一包内可见.默认不使用任何修饰符. public:公有的 被声明为public的类.方法.构造方法和接口能够被任何其他类访问. 如果几个相互访问的public类分布在不用的包中,则需要导入相应public类所在的包.由于类的继承性,类所有的公有方法和变量都能被其子类继承. protected:受保

【转】C++ 类访问控制public/private/protected探讨

示例1:---------------------------------------- class C{ int c1; int c2;public: void set(C* s, int i, int j) { s->c1 = i; s->c2 = j; } friend std::ostream& operator<<(std::ostream& os, const C& c);};std::ostream& operator<<(

14 PHP 类的继承 [public protected private] parent 构造方法 析构方法 重写 最终类和方法 设计模式

类的继承 简单理解: 某个类A具有某些特征,另一个类B,也具有A类的所有特征,并且还可能具有自己的更多的一些特征,此时,我们就可以实现:B类使用A的特征信息并继续添加自己的一些特有特征信息. 基本概念 继承:一个类从另一个已有的类获得其特性,称为继承. 派生:从一个已有的类产生一个新的类,称为派生. 继承和派生,其实只是从不同的方向(角度)来表述,本质上就是一个事情. 父类/子类:已有类为父类,新建类为子类.父类也叫"基类",子类也叫"派生类" 单继承:一个类只能从

c++ public protected private 继承

1:访问控制 1.1 public 这类型成员可以被类本身函数访问,也可以被外部创建的类对象调用.子类对象与子类内部可以访问 1.2 protected类型成员,只能被类本身函数访问.外部创建的类对象没有访问权限.子类对象没有访问权限,子类内部可以访问 1.3 private类型成员,只能被类本身函数访问,外部创建的类对象没有访问权限.子类对象和子类内部都没有访问权限 class TestObject{ public: void Function(); void TestPublic(); pr

JAVA修饰符类型(public,protected,private,friendly)

JAVA修饰符类型(public,protected,private,friendly) public的类.类属变量及方法,包内及包外的不论什么类均能够訪问:protected的类.类属变量及方法,包内的不论什么类,及包外的那些继承了此类的子类才干訪问:private的类.类属变量及方法,包内包外的不论什么类均不能訪问:假设一个类.类属变量及方法不以这三种修饰符来修饰,它就是friendly类型的,那么包内的不论什么类都能够訪问它,而包外的不论什么类都不能訪问它(包含包外继承了此类的子类),因此

C++中public,protected,private访问

总结:1. protected和private的区别在于 ,protected的访问标号限制,能够被派生类的成员函数访问,而private不能2. protected和publice的区别在于,protected的访问限制,使其不能被基类的对象访问. -----------------------------------------------------第一:private, public, protected 访问标号的访问范围.private:只能由1.该类中的函数.2.其友元函数访问.不

public, protected, private,internal,protected internal的区别

虽然这个知识比较简单, 但是老是会忘, 写上来, 增强记忆. 在C#语言中,共有五种访问修饰符:public.private.protected.internal.protected internal.作用范围如下表: 访问修饰符 说明public 公有访问.不受任何限制.private 私有访问.只限于本类成员访问,子类,实例都不能访问.protected 保护访问.只限于本类和子类访问,实例不能访问.internal 内部访问.只限于本项目内访问,其他不能访问.protected inter

C++:继承访问属性(public/protected/private)

? 公有继承(public) 公有继承在C++中是最常用的一种继承方式,我们先来看一个示例: 1 #include<iostream> 2 using namespace std; 3 class Father{ 4 public: 5 Father()=default; 6 void Father_show1(){ 7 cout<<"调用Father类的public方法:Father_show1"<<endl; 8 } 9 protected: 1

php public protected private属性实例详解

php 类中函数和类变量都有三个属性:public protected private,具体什么时候使用什么属性好纠结,特意找了个实例,这样看起来更清晰. public 表示全局,类内部外部子类都可以访问:private 表示私有的,只有本类内部可以使用:protected 表示受保护的,只有本类或子类或父类中可以访问: <?php//父类class father{ public function a(){ echo "function a"; } private functio