c++ 类的基础
2016-06-01 23:42
190 查看
类的访问控制
类中主要有两部分成员函数
成员变量
分三个级别
+ public
+ protected
+ private
定义一个简单的类A
class A{ private: int a=0; public: int b=1; void cout_a(); protected: int c=2; }; void A::cout_a(void) { cout<<"a"<<a<<endl; }
这里
public可以被实例(类的对象)访问
protected和private则不可以被外部访问
二者区别为protected可以被子类访问,但是private只能被内部接口访问
对于一个对象
A a cout<<a.a<<a.b<<a.c<<endl;
编译器会报错
error: 'int A::a' is private error: 'int A::c' is protected
但是我们可以通过内部接口cout_a来访问A::a
a.cout_a();
这就是所谓的隐藏实现,访问控制
这里有两方面考虑
一是让客户端程序员无法触及他们不应该触及的地方,防止类被修改
二是类的设计者可以任意修改类内部的实现方式而不影响客户端程序员
类的继承
继承方式多重继承
继承的访问限制
虚函数
类的构造
静态变量
友元函数
这里重新强调一下三种访问权限
public:可以被任意实体访问,包括该类中的函数,子类中的函数,友元函数以及该类的对象访问
protected:只允许子类及本类的成员函数以及友元函数访问,该类对象不可以访问
private:只允许本类的成员函数,以及其友元函数访问,不可被子类中的函数以及对象访问
除此以外强调一下三种继承方式
Tables | public: | protected: | private: |
---|---|---|---|
public继承 | public | protected | x |
protected继承 | protected | protected | x |
private继承 | private | private | x |
举个例子
class B:public A{ public: void cout_c(); }; void B::cout_c() { cout<<"c"<<c<<endl; cout<<"a"<<a<<endl; }
B b; b.cout_c();
则会报错
error: 'int A::a' is private
不可以被子类的成员函数访问,而c却可以被子类成员函数访问
这时候需要将cout_c中的对a的访问注释掉
然而需要注意的是,继承之后,cout_a()函数还是public,还是可以访问的。并且通过cout_a()这个父类的函数接口可以访问a这个成员变量。但是,这是当B类中没有定义该函数的情况下才可以实现的,调用的是A中的cout_a()
举个例子
void A::cout_a(void) { cout<<"a"<<a<<endl; cout<<"b"<<b<<endl; } class B:public A{ int b=10; public: void cout_c(); }; B b; b.cout_a();
此时输出的a和b是A类中定义的值,而不是b=10
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C语言自动生成enum值和名字映射代码
- C语言练习题:自由落体的小球简单实例
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中进制知识汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- C语言实现选择排序、冒泡排序和快速排序的代码示例
- 探讨C语言的那些小秘密之断言