【C++】类与对象(上)(二)

简介: 【C++】类与对象(上)


四、类的访问限定符及封装

1.访问限定符

当然,在类中呢,C++还提出了一些其他的东西,public和private:

class Stack // 类型
{
public:
  void Push(int x)
  {
    // Init();
    //...
  }
  void Init(int N = 4) //缺省参数
  {
    // ...
    top = 0;
    capacity = 0;
  }
private:
  int* a;  
  int top;
  int capacity;
};

简单地说就是,private是私有,他只能在自己的类中去使用,而public在内外都可以使用,没有限制,这就更好的去使对象完善,方便内外去管理权限并使用。

【访问限定符说明】

1. public 修饰的成员在类外可以直接被访问

2. protected 和 private 修饰的成员在类外不能直接被访问 ( 此处 protected 和 private 是类似的)  

3. 访问权限作用域从该  访问限定符  出现的位置开始直到下一个访问限定符出现时为止

class Stack // 类型
{
public:
    void Push(int x)
    {
        // Init();
        //...
    }
    void Init(int N = 4)
    {
        // ...
        top = 0;
        capacity = 0;
    }
//private:
    int* a;
    int top;
    int capacity;
};

若有private,则public的作用域到private,private的作用域到结尾。


若没有,则直接到结尾,整个都为公开public。


5. class 的默认访问权限为 private , struct 为 public( 因为 struct 要兼容 C)

   这就是为什么,struct中,变量访问结构体中的值,可以随便访问。

2.封装

面向对象的三大特性:封装、继承、多态。(最重要的三个特性)

在类和对象阶段,主要是研究类的封装特性,那什么是封装呢?

封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来

和对象进行交互。

封装本质上是一种管理,让用户更方便使用类。 一种管理方式。

举例说明:

在C语言中,实现栈时,大家如果都很遵循规则,访问栈顶元素时,就会调用Top函数,但是总会有人直接去 打印st.a[top],但是可能此时的top不一定是栈顶,可能也是栈顶的前一个,每个人实现的方式都不同,所以就会出现问题。


但是在C++中,就体现了封装的作用,是一种管理,就会将类的成员变量设置为私有private,就不会让你去访问,只是通过函数接口来访问,这样就不会出现问题。  

五、类的作用域和命名空间区别

类定义了一个新的作用域,类的所有成员都在类的作用域中在类体外定义成员时,需要使用::

作用域操作符指明成员属于哪个类域。

class Person
{
public:
 void PrintPersonInfo();
private:
 char _name[20];
 char _gender[3];
 int  _age;
};
// 这里需要指定PrintPersonInfo是属于Person这个类域
void Person::PrintPersonInfo()
{
 cout << _name << " "<< _gender << " " << _age;
}

那就会有人想,可不可以这样使用  Person::_age = 1;不是命名空间域访问里面的变量时,就可以通过域操作符来访问吗?


但是这里是有区别的,命名空间域相当于设置了一堵围墙,他将里面的变量围了起来,只能通过域操作符来访问到里面变量,函数等,但是类的作用域(类域)它是一堵虚拟墙,他没有实体,就相当于加了密码锁的一张图纸,没有实质内容的,必须按照图纸造出对象以后,才可以通过域操作符来访问。


类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图 ,只设

计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计,实例化出的对象

才能实际存储数据,占用物理空间

目录
相关文章
|
19天前
|
编译器 C++
C++之类与对象(完结撒花篇)(上)
C++之类与对象(完结撒花篇)(上)
31 0
|
14天前
|
存储 编译器 对象存储
【C++打怪之路Lv5】-- 类和对象(下)
【C++打怪之路Lv5】-- 类和对象(下)
19 4
|
14天前
|
编译器 C语言 C++
【C++打怪之路Lv4】-- 类和对象(中)
【C++打怪之路Lv4】-- 类和对象(中)
16 4
|
13天前
|
存储 安全 C++
【C++打怪之路Lv8】-- string类
【C++打怪之路Lv8】-- string类
14 1
|
15天前
|
存储 编译器 C语言
【C++打怪之路Lv3】-- 类和对象(上)
【C++打怪之路Lv3】-- 类和对象(上)
14 0
|
19天前
|
编译器 C++ 数据库管理
C++之类与对象(完结撒花篇)(下)
C++之类与对象(完结撒花篇)(下)
28 0
|
19天前
|
编译器 C++
C++之类与对象(3)(下)
C++之类与对象(3)(下)
30 0
|
19天前
|
编译器 C++
C++之类与对象(3)(上)
C++之类与对象(3)
15 0
|
19天前
|
编译器 C++
C++之类与对象(2)
C++之类与对象(2)
28 0
|
19天前
|
存储 编译器 C++
C++之类与对象(1)(下)
C++之类与对象(1)(下)
25 0