码迷,mamicode.com
首页 > 编程语言 > 详细

C++基础(1)

时间:2016-09-11 11:29:49      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:

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)

标签:

原文地址:http://www.cnblogs.com/guxuanqing/p/5861288.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!