C++基础(1)
2016-09-11 11:13
459 查看
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
#include <iostream> #include <string> using namespace std; class Teacher { public: Teacher(char *temp) { director = new char[10]; strcpy(director,temp); } ~Teacher() { cout<<"释放堆区director内存空间1次"; delete[] director; cin.get(); } char *show(); protected: char *director; }; char *Teacher::show() { return director; } class Student { public: Student() { number = 1; score = 100; } void show(); protected: int number; int score; Teacher teacher("王大力");//错误,一个类的成员如果是另外一个类的对象的话,不能在类中使用带参数的构造函数进行初始化 }; void Student::show() { cout<<teacher.show()<<endl<<number<<endl<<score<<endl; } void main() { Student a; a.show(); Student b[5]; for(int i=0; i<sizeof(b)/sizeof(Student); i++) { b[i].show(); } cin.get(); }
View Code
可是很遗憾,程序不能够被编译成功,为什么呢?
因为:类是一个抽象的概念,并不是一个实体,并不能包含属性值(这里来说也就是构造函数的参数了),只有对象才占有一定的内存空间,含有明确的属性值!
详见:http://pcedu.pconline.com.cn/empolder/gj/c/0503/568909.html。
3.关于构造函数及析构函数的调用顺次:
http://blog.csdn.net/xw13106209/article/details/68993704.关于深拷贝,浅拷贝
http://www.cnblogs.com/BlueTzar/articles/1223313.html5.常见知识点
http://blog.csdn.net/lushujun2011/article/details/6827555相关文章推荐
- Visual C++.NET编程基础讲座之四
- 遭遇C++基础问题 [2004年5月29日 18:33 ]
- C++基础[总]
- C++基础认识(基础的也要学)
- C++ STL编程轻松入门基础
- c/c++基础的,但也是重要的
- C++相关基础知识(转贴)
- C++基础:怎样判断某一文件是否存在?
- C++ STL编程轻松入门基础
- [C++基础]重载、覆盖、多态与函数隐藏
- Visual C++.net基础讲座二
- C++ FAQS 翻译3 (第一部分 预备知识 第二章 C++语法和语义基础)
- C++基础知识(二)
- Visual C++.net基础讲座三
- 回复:学习java必须有c++基础么?
- Visual C++.NET编程基础讲座之二
- Visual C++.net 基础讲座一
- 关于C++的一些细节[五:函数-基础]
- C++ STL编程轻松入门基础
- C++ FAQ Lite[19]--继承(基础)(更新)