C++学习3.16

本文详细介绍了C++中的二进制运算符,包括与(&)、或(|)、异或(^)和非(~)运算符,以及左移(<<)和右移(>>)运算。此外,还讲解了memset函数在内存初始化中的应用,friend关键字打破封装的特性,ostream的输出流用法,以及priority_queue的优先级队列概念。
摘要由CSDN通过智能技术生成

7.运算符与二进制

1. 与运算符(&)

  • 二元操作符,操作两个二进制数据;两个二进制数最低位对齐,只有当两个对位数都是1时才为1,否则为0

2. 或运算符(|)

  • 二元操作符,操作两个二进制数据;两个二进制数最低位对齐,当两个对位数只要有一个是1则为1,否则为0

3. 异或运算符(^)

  • 二元操作符,操作两个二进制数据;两个二进制数最低位对齐,只有当两个对位数字不同时为1,相同为0

4. 非运算符(~)

  • 一元操作符,记下个口诀,他的相反数减一 例如:~5 就是 -6

5.1 左移运算符(<<)

  • 二元操作符,数字m二进制向左移动n位的结果;结果相当于: m * 2n

5.2 右移运算符(>>)

  • 二元操作符,m数字二进制向右移动n位的结果;结果相当于: m / 2n 的结果向上取整
  • 注意: 最后的11向右移动两位,正好补上左边补上0; 所以结果为0

3.16

8.memset函数的运用

这是个初始化函数,作用是在一段内存块中填充某个给定的值,他是对较大结构体或数组进行清零操作的一种最快方法。

#include <string.h>

void *memset(void *s,int ch,size_t n);

将s中当前位置后面的n个字节用ch替换并返回s

  • memset() 函数常用于内存空间初始化。

  • memset()的深刻内涵:用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化

    例如:memset(a,’\0’,sizeof(a));

  • memset可以方便的清空一个结构类型的变量或数组。

9.friend关键字

它能让被修饰的对象冲破本class的封装特性,从而能够访问本class的私有对象。

  • 如果你在A类中,申明了函数func()是你的friend,那么func()就可以使用A类的所有成员变量,无论它在什么地方定义的。
  • 如果你在A类中,申明了B类是你的friend,那么B类中的方法就可以访问A类的所有成员变量。
  1. #include
  2. using namespace std;
  3. class A {
  4. public:
  5. ​ A() {
  6. ​ password = 1111;
  7. ​ birthday = 808;
  8. ​ }
  9. ​ ~A() { }
  10. ​ friend int func(A a); // 向c++表示,int func(A a)是我的朋友,所以它可以使用我的所有东西。
  11. ​ friend class B; // 向c++表示,class B是我的朋友,所以它可以使用我的所有东西。
  12. private:
  13. ​ int password;
  14. ​ int birthday;
  15. };
  16. int func(A a) {
  17. ​ cout << a.password << " and " << a.birthday << endl; //可以访问
  18. ​ a.password = 1; //甚至可以修改
  19. ​ cout << a.password << endl;
  20. ​ return 0;
  21. }
  22. class B {
  23. public:
  24. ​ B() { }
  25. ​ ~B() { }
  26. // 因为在A类中已经声明了B类是它的朋友,所以B类中方法就可以访问A类的私有变量了
  27. ​ void show(A a) {
  28. ​ cout << "your account is " << a.account << " and with pass: " << a.password << endl;
  29. ​ }
  30. private:
  31. };
  32. int main() {
  33. ​ A a;
  34. ​ func(a);
  35. ​ B b;
  36. ​ b.show(a);
  37. ​ system(“pause”);
  38. }

10.ostream的用法

ostream表示输出流

C++中的ostream这个类型,通常作为某个类的友元函数出现,用于<<操作重载中

friend ostream & operator <<(ostream & os,const CPoint & p){ return os << "x = "<<p.x << " y = "<< p.y << endl; }

这样子 可以直接输出point这个类了

11.priority用法

优先输出大数据

priority_queue<Type, Container, Functional>

Type为数据类型, Container为保存数据的容器,Functional为元素比较方式。

如果不写后两个参数,那么容器默认用的是vector,比较方式默认用operator<,也就是优先队列是大顶堆,队头元素最大。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值