标签:
C++中 public,protected, private 访问标号小结,即访问标号使用限制。
第一:private, public, protected 访问标号的访问范围。
private:只能由1.该类中的函数、2.其友元函数访问。
不能被任何其他访问,该类的对象也不能访问。
protected:可以被1.该类中的函数、2.子类的函数、以及3.其友元函数访问。
但不能被该类的对象访问。
public:可以被1.该类中的函数、2.子类的函数、3.其友元函数访问,也可以由4.该类的对象访问。
注:友元函数包括3种:
(1):设为友元的普通的非成员函数;
(2):设为友元的其他类的成员函数;如下:
class B;
class A
{ ...
friend int B::f();
...
};
(3):设为友元类中的所有成员函数。
第二:类的继承后方法属性变化。
可以将类的继承想象为对父类对象的访问。不说是private继承后父类的protected和public属性在子类中变为private,因为子类可以访问自身的private,就说它可以访问父类的private属性。对于父类,它被子类继承之后属性发生变化,这种变化直接的影响是子类在访问父类的时候访问权限受限了,如果要求父类的原本的权限,就应使用public继承方式。
private 属性不能够被继承。
使用private继承,父类的protected和public属性在子类中变为private;
使用protected继承,父类的protected和public属性在子类中变为protected;
使用public继承,父类中的protected和public属性不发生改变;
如下所示:
public: protected: private:
public继承 public protected 不可用
protected继承 protected protected 不可用
private继承 private private 不可用
protected继承和private继承能降低访问权限。
本文出自 “将弛直奔” 博客,请务必保留此出处http://cnmtjp.blog.51cto.com/204390/36548
1 #include <iostream> 2 #include <string> 3 using namespace std; 4 class Teacher 5 { 6 public: 7 Teacher(char *temp) 8 { 9 director = new char[10]; 10 strcpy(director,temp); 11 } 12 ~Teacher() 13 { 14 cout<<"释放堆区director内存空间1次"; 15 delete[] director; 16 cin.get(); 17 } 18 char *show(); 19 protected: 20 char *director; 21 }; 22 char *Teacher::show() 23 { 24 return director; 25 } 26 class Student 27 { 28 public: 29 Student() 30 { 31 number = 1; 32 score = 100; 33 } 34 void show(); 35 36 protected: 37 int number; 38 int score; 39 Teacher teacher("王大力");//错误,一个类的成员如果是另外一个类的对象的话,不能在类中使用带参数的构造函数进行初始化 40 41 }; 42 43 void Student::show() 44 { 45 cout<<teacher.show()<<endl<<number<<endl<<score<<endl; 46 } 47 void main() 48 { 49 Student a; 50 a.show(); 51 Student b[5]; 52 for(int i=0; i<sizeof(b)/sizeof(Student); i++) 53 { 54 b[i].show(); 55 } 56 cin.get(); 57 }
可是很遗憾,程序不能够被编译成功,为什么呢?
因为:类是一个抽象的概念,并不是一个实体,并不能包含属性值(这里来说也就是构造函数的参数了),只有对象才占有一定的内存空间,含有明确的属性值!
详见:http://pcedu.pconline.com.cn/empolder/gj/c/0503/568909.html。
http://blog.csdn.net/xw13106209/article/details/6899370
http://www.cnblogs.com/BlueTzar/articles/1223313.html
http://blog.csdn.net/lushujun2011/article/details/6827555
标签:
原文地址:http://www.cnblogs.com/guxuanqing/p/5861288.html