首页 > 代码库 > C++基础(1)

C++基础(1)

1.关于继承及访问。

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 }
View Code

可是很遗憾,程序不能够被编译成功,为什么呢? 

 


  因为:类是一个抽象的概念,并不是一个实体,并不能包含属性值(这里来说也就是构造函数的参数了),只有对象才占有一定的内存空间,含有明确的属性值!

详见:http://pcedu.pconline.com.cn/empolder/gj/c/0503/568909.html。

3.关于构造函数及析构函数的调用顺次:

http://blog.csdn.net/xw13106209/article/details/6899370

4.关于深拷贝,浅拷贝

http://www.cnblogs.com/BlueTzar/articles/1223313.html

5.常见知识点

http://blog.csdn.net/lushujun2011/article/details/6827555

C++基础(1)