34共用数据的保护

简介: 34共用数据的保护

C++入门——60s从0到1

共用数据的保护

 

在C++中,常量是一种用于保护共享数据的完整性、可靠性和安全性的重要概念。常量是指在程序运行期间不允许被修改的值。在共用数据的情况下,使用常量可以确保数据不会被意外地修改或破坏,从而提高程序的安全性和可靠性。

 

除了变量和函数参数可以被声明为常量外,C++还支持常对象、常对象成员、指向对象的常指针、指向常对象的指针变量和对象的常引用等概念。这些概念可以帮助我们更好地保护共用数据的完整性、可靠性和安全性。

 

常对象

 

常对象是指将对象声明为常量。这意味着对象的状态不能被修改,包括对象的成员变量和成员函数。在声明常对象时,需要在类定义前加上关键字`const`。例如:

 

class MyClass {
public:
    void setValue(int value) {
        data = value; // 可以修改data成员变量
    }
    void printData() const {
        cout << data << endl; // 只能访问data成员变量,不能修改它的值
    }
private:
    int data;
};
 
const MyClass myObj; // 声明一个常对象myObj

 

在上面的代码中,我们定义了一个名为`MyClass`的类,其中包含一个私有成员变量`data`和一个公有成员函数`setValue`和`printData`。`setValue`函数用于设置`data`成员变量的值,但是由于它是可变的(没有使用关键字`const`),所以可以修改`data`的值。`printData`函数用于输出`data`成员变量的值,但是由于它是常成员函数,所以不能修改`data`的值。然后我们声明了一个名为`myObj`的常对象,并且不能调用`setValue`函数来修改它的状态。

 

常对象成员

 

常对象成员是指类的成员变量或成员函数被声明为常量。例如:

 

class MyClass {
public:
    void setValue(int value) {
        data = value; // 可以修改data成员变量
    }
    void printData() const {
        cout << data << endl; // 只能访问data成员变量,不能修改它的值
    }
private:
    int data;
};

 

const MyClass myObj; // 声明一个常对象myObj

 

在上面的代码中,我们将整个类`MyClass`声明为常类型(使用关键字`const`),这意味着所有的公有成员函数都是常成员函数,所有的私有成员变量都是常量。因此我们可以创建一个名为`myObj`的常对象,并且只能调用`printData`函数来输出`data`成员变量的值,而不能调用`setValue`函数来修改它的值。

 

指向对象的常指针

 

指向对象的常指针是指指向对象的指针被声明为常量。这意味着指针本身不能被修改,但是它所指向的对象的状态可以被修改。例如:

 

class MyClass {

public:

   void setValue(int value) {

       data = value; // 可以修改data成员变量

   }

   void printData() const {

       cout << data << endl; // 只能访问data成员变量,不能修改它的值

   }

private:

   int data;

};

 

MyClass* ptr = new MyClass(); // 创建一个普通指针ptr指向MyClass类型的对象

const MyClass* const_ptr = ptr; // 将普通指针ptr转换为指向对象的常指针const_ptr

ptr->setValue(1); // 可以调用setValue函数来修改MyClass对象的data成员变量的值

const_ptr->printData(); // 可以调用printData函数来输出MyClass对象的data成员变量的值,但不能通过const_ptr来改变MyClass对象的data成员变量的值

delete ptr; // 释放内存

```

 

在上面的代码中,我们首先创建了一个名为`ptr`的普通指针,它指向一个名为`temp`的`MyClass`类型的对象。然后我们将`ptr`转换为一个指向对象的常指针`const_ptr`。由于`const_ptr`是一个指向对象的常指针,所以它所指向的对象的状态不能被修改。然后我们调用了`setValue`函数来设置`temp`对象的`data`成员变量的值为1。最后我们调用了`printData`函数来输出`temp`对象的`data`成员变量的值。注意我们不能通过`const_ptr`来改变`temp`对象的`data`成员变量的值。最后我们释放了内存。

 

指向常对象的指针变量

 

指向常对象的指针变量是指将指向对象的指针声明为只读(即指向一个已经被赋予初值的只读变量)。例如:

class MyClass {
public:
    void setValue(int value) {
        data = value; // 可以修改data成员变量
    }
private:
    int data;
};

MyClass temp = {10}; // 创建一个普通类型的MyClass对象temp并初始化它的数据成员为10

const MyClass* ptr = &temp; // 将普通类型的MyClass对象的地址赋给指向常类型的MyClass对象的指针ptr

ptr->setValue(20); // 可以调用setValue函数来修改MyClass对象的data成员变量的值,但是不能通过ptr来改变MyClass对象的data成员变量的地址或者其他状态的属性

在上面的代码中,我们首先创建了一个名为`temp`的普通类型的`MyClass`对象并初始化它的数据成员为10。然后我们将普通类型的`temp`对象的地址赋给了指向常类型的`MyClass`对象的指针`ptr`。由于`ptr`是一个指向常类型的指针变量,所以它所指向的对象的状态不能被修改(即不能通过它来改变其他状态属性的值)。然后我们调用了`setValue`函数来设置`temp`对象的`data`数据属性的值为20。注意我们不能通过`ptr`来改变其他状态属性的值。

 

目录
相关文章
|
2月前
|
程序员 编译器
静态分配和动态分配之间的区别是什么
【9月更文挑战第1天】静态分配和动态分配之间的区别是什么
426 0
|
6月前
|
存储 安全 C语言
动态储存方式与静态储存方式
动态储存方式与静态储存方式
62 1
|
6月前
|
C++
35对象的动态建立和释放
35对象的动态建立和释放
28 1
|
资源调度 调度
系统会为你分配一个单独的任务托管单元
系统会为你分配一个单独的任务托管单元
50 1
|
存储 缓存 小程序
小程序全局共享数据--存储
小程序全局共享数据--存储
91 0
|
IDE 开发工具
域对象共享数据~
域对象共享数据~
|
NoSQL 安全 Java
案例15-ArrayList线程不安全,共用全局变量导致数据错乱问题,占用内存情况
案例15-ArrayList线程不安全,共用全局变量导致数据错乱问题,占用内存情况
|
安全 Java 编译器
|
Java
多个JVM之间,能否共用同样的类?
多个JVM之间,能否共用同样的类?
88 0
C++公用数据的保护
1.有const修饰的成员,构造函只能以成员列表方式赋值,只能读取数据成员,不能改变数据成员;
130 0
C++公用数据的保护