C++ 封装

C++ 封装

      • 封装的意义
      • class 和 stuct 的区别
      • 成员属性设置为私有
      • 构造函数和析构函数
        • 构造函数
          • 构造函数初始化列表
          • 浅拷贝和深拷贝
        • 析构函数
      • 静态成员

C++面向对象的三大特征:封装、继承、多态

C++认为万事万物皆为对象,对象上有其属性和行为。

封装的意义

封装是C++面向对象三大特性之一;

封装的意义:

  • 将属性和行为作为一个整体,表现生活中的事物

语法:class 类名 { 权限控制: 属性 / 行为 }

  • 将属性和行为加以权限控制

访问权限有三种:

  1. public 公共权限
    类内可以访问,类外可以访问
  2. protected 保护权限
    类内可以访问,类外不可以访问,儿子可以访问父亲的保护内容
  3. private 私有权限
    类内可以访问,类外不可以访问,儿子不可以访问父亲的保护内容

class 和 stuct 的区别

在c++中struct和class唯一的区别就在于默认的访问权限不同

区别:

  • struct: 默认权限为公共
  • class: 默认权限为私有

成员属性设置为私有

优点:

  • 将所有成员属性设置为私有,可以自己控制读写权限
  • 对于写权限,我们可以检测权限的有效性

示例:

#include 
using namespace std;
#include 

class Student{
private:
	string m_name;

public:
	void setName(string name) {
		m_name = name;
	}

	string getName() {
		return m_name;
	}
};

int main(){
	Student s;
	s.setName("lxf");
	cout << s.getName() << endl;
	system("pause");
	return 0;
}

构造函数和析构函数

如果我们不提供构造和析构,编译器会提供默认的空实现构造和析构

构造函数

主要作用在于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无须手动调用

构造函数语法:类名(){ }

  1. 构造函数,没有返回值,也不写void
  2. 函数名称与类名相同
  3. 构造函数可以有参数,因此可以发生重载
  4. 程序会自动调用,无须手动调用,并且只会调用一次
构造函数初始化列表

例如:

// 初始化列表
Persono(int a, int b, int c) : m_a(a),m_b(b),m_c(c){

}
浅拷贝和深拷贝

浅拷贝:简单的赋值拷贝操作

浅拷贝可能会带来一些问题,比如: 堆区的内存重复释放

深拷贝:在堆区重新申请空间,进行拷贝操作

浅拷贝带来的"堆区内内存重复释放"的问题,可以使用深拷贝来解决;
手动写深拷贝,重新在堆区申请内存

析构函数

主要作用在于对象销毁前自动调用,执行一些清理操作

析构函数语法:~类名(){ }

  1. 析构函数,没有返回值,也不写void
  2. 函数名称与类名相同,在类名前面加上符号~
  3. 构造函数不可以有参数,因此不可以发生重载
  4. 程序会自动调用,无须手动调用,并且只会调用一次

静态成员

静态成员就是在变量和成员前面加上 static 关键字

静态成员分为:

  • 静态成员变量
    – 所有对象共享同一份数据
    – 在编译阶段分配内存
    – 类内声明,类外初始化
  • 静态成员函数
    – 所有对象共享同一个函数
    – 静态成员函数只能访问静态成员变量

你可能感兴趣的:(C++,c++,开发语言)