详解C++ 共享数据保护机制

 更新时间:2021年02月20日 16:27:00   作者:流星斩月  
这篇文章主要介绍了详解C++ 共享数据保护机制的相关资料,帮助大家更好的理解和学习使用c++,感兴趣的朋友可以了解下

  下面随笔说明C++共享数据保护机制。

共享数据的保护

  对于既需要共享、又需要防止改变的数据应该声明为常类型(用const进行修饰)。

  对于不改变对象状态的成员函数应该声明为常函数。

(1)常类型

  ①常对象:必须进行初始化,不能被更新。

  const 类名 对象名

  ②常成员

  用const进行修饰的类成员:常数据成员和常函数成员

  ③常引用:被引用的对象不能被更新。

  const  类型说明符  &引用名

  ④常数组:数组元素不能被更新(详见第6章)。

  类型说明符  const  数组名[大小]...

  ⑤常指针:指向常量的指针(详见第6章)。

(2)常对象

  用const修饰的对象

例:

class A

{

 public:

 A(int i,int j) {x=i; y=j;}

      ...

 private:

 int x,y;

};

A const a(3,4); //a是常对象,不能被更新

(3)常成员

  用const修饰的对象成员

  ①常成员函数

  使用const关键字说明的函数。

  常成员函数不更新对象的数据成员。

  常成员函数说明格式:

  类型说明符  函数名(参数表)const;

  这里,const是函数类型的一个组成部分,因此在实现部分也要带const关键字。

  const关键字可以被用于参与对重载函数的区分

  通过常对象只能调用它的常成员函数。

  ②常数据成员

  使用const说明的数据成员。

//常成员函数举例

#include<iostream>

using namespace std;

class R {

public:

 R(int r1, int r2) : r1(r1), r2(r2) { }

 void print();

 void print() const;

private:

 int r1, r2;

};



void R::print() {

 cout << r1 << ":" << r2 << endl;

}

void R::print() const {

 cout << r1 << ";" << r2 << endl;

}

int main() {

 R a(5,4);

 a.print(); //调用void print()

 const R b(20,52);

 b.print(); //调用void print() const

  return 0;

}
//常数据成员举例

#include <iostream>

using namespace std;

class A {

public:

  A(int i);

  void print();

private:

  const int a;

  static const int b; //静态常数据成员

};



const int A::b=10;

A::A(int i) : a(i) { }

void A::print() {

 cout << a << ":" << b <<endl;

}

int main() {

//建立对象a和b,并以100和0作为初值,分别调用构造函数,

//通过构造函数的初始化列表给对象的常数据成员赋初值

 A a1(100), a2(0);

 a1.print();

 a2.print();

 return 0;

}

(4)常引用

  如果在声明引用时用const修饰,被声明的引用就是常引用。

  常引用所引用的对象不能被更新。

  如果用常引用做形参,便不会意外地发生对实参的更改。常引用的声明形式如下:

  const  类型说明符  &引用名;

//常引用作形参

#include <iostream>

#include <cmath>

using namespace std;

class Point { //Point类定义

public:   //外部接口

  Point(int x = 0, int y = 0)

 : x(x), y(y) { }

  int getX() { return x; }

  int getY() { return y; }

  friend float dist(const Point &p1,const Point &p2);

private:   //私有数据成员

  int x, y;

};



float dist(const Point &p1, const Point &p2) {

  double x = p1.x - p2.x;

  double y = p1.y - p2.y;

  return static_cast<float>(sqrt(x*x+y*y));

}



int main() { //主函数

  const Point myp1(1, 1), myp2(4, 5);

  cout << "The distance is: ";

  cout << dist(myp1, myp2) << endl;

  return 0;

}

以上就是详解C++ 共享数据保护机制的详细内容,更多关于C++ 共享数据保护机制的资料请关注脚本之家其它相关文章!

相关文章

  • C++实现趣味扫雷游戏

    C++实现趣味扫雷游戏

    这篇文章主要为大家详细介绍了C++实现趣味扫雷游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • C++简单又好用的基本运算符重载

    C++简单又好用的基本运算符重载

    继友元知识过后,就到了今天的C++运算符重载的内容了,运算符重载是C++里比较重要的内容。这篇博文不会一下子讲完各种运算符重载,因为太多了了也不好吸收掌握,所以运算符重载我准备分多次记录和分享,那么接下来进入正文
    2022-06-06
  • C++ Cartographer源码中关于Sensor的数据走向深扒

    C++ Cartographer源码中关于Sensor的数据走向深扒

    这篇文章主要介绍了C++ Cartographer源码中关于Sensor的数据走向,整个Cartographer源码阅读是很枯燥的, 但绝对是可以学到东西的,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-03-03
  • C/C++中接收return返回来的数组元素方法示例

    C/C++中接收return返回来的数组元素方法示例

    return是C++预定义的语句,它提供了种植函数执行的一种放大,最近学习中遇到了相关return的内容,觉着有必要总结一下,这篇文章主要给大家介绍了关于C/C++中如何接收return返回来的数组元素的相关资料,需要的朋友可以参考下。
    2017-12-12
  • QT中进程的创建实现

    QT中进程的创建实现

    本文主要介绍了QT中进程的创建实现,详细介绍了创建进程的整个过程,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2023-08-08
  • C++ 大根堆排序学习笔记

    C++ 大根堆排序学习笔记

    这篇文章主要为大家介绍了C++ 大根堆排序的学习教程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • C/C++内存管理详情

    C/C++内存管理详情

    这篇文章主要通过描述了C/C++内存分布、C/C++的一些函数理方面来展开C/C++内存管理的内容,需要的朋友请参考下文
    2021-08-08
  • C语言小知识之为什么要使用指针详析

    C语言小知识之为什么要使用指针详析

    指针是C语言中一个非常重要的概念,也是C语言的特色之一,使用指针可以对复杂数据进行处理,能对计算机的内存分配进行控制,在函数调用中使用指针还可以返回多个值,这篇文章主要给大家介绍了C语言小知识之为什么要使用指针的相关资料,需要的朋友可以参考下
    2021-10-10
  • C++ explicit构造函数实例解析

    C++ explicit构造函数实例解析

    这篇文章主要介绍了C++ explicit构造函数,需要的朋友可以参考下
    2014-07-07
  • 用C++实现一个命令行进度条的示例代码

    用C++实现一个命令行进度条的示例代码

    这篇文章主要介绍了用C++实现一个命令行进度条的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04

最新评论