2024.3.21记

本文讲述了作者在学习中遇到的原子操作内存次序概念的困惑,以及工作中对LeetCode中无人机行业专利的探索。重点介绍了C++中的成员指针,包括数据成员指针和成员函数指针的声明、使用和示例。
摘要由CSDN通过智能技术生成

昨天总结

学习了会原子操作的内存次序,基本上是没看懂。改天找个视频再看看。
工作这块没太大进展,上下游问题都很多,难搞哦
leetcode:做了一道丑数的题目,仅仅是前天的延续。

今日计划

工作推进
一道leetcode
看看相关无人机行业的专利

学习记录

c++ 类成员指针:

成员指针是可以指向类的非静态成员的指针。类的静态成员不属于任何对象,因此无须特殊的静态成员的指针,也就是说指向静态成员的指针与普通指针没有什么区别。

成员指针的类型囊括了类的类型以及成员的类型。当初始化一个这样的指针时,我们令其指向类的某个成员,但是不指定该成员所属的对象,直到使用该指针的时候,才提供成员所属的对象。

后续我们用如下的类做示例:

class People {
  public:
  	People() = default;
  	People(std::string n, int a): name(n), age(a) {}
  	int get_age() const {return age;}
  	std::string get_name() const {
		return name;
	}
	void set_age(int age) { this->age = age; }
    void set_name(string name) { this->name = name; }

  public: // 这里如果定义成private,则不能够赋值
  	std::string name;
  	int age;
};

数据成员指针

在声明成员指针时,必须包含成员所属的类,我们必须在*之前加classname::来表示当前定义的指针可以指向classname的成员。

  // 定义类数据成员指针,该指针指向People类的一个string类型的数据成员
  const string People::*name_ptr;
  name_ptr = &People::name;     // 成员指针赋值
  auto age_ptr = &People::age;  // c++新特性
  People p("aaa", 15), *ptr_p = &p;
  // 使用成员指针的两种
  std::cout << p.*name_ptr << " " << ptr_p->*name_ptr << std::endl;
  std::cout << p.*age_ptr << " " << ptr_p->*age_ptr << std::endl;

成员函数指针

和指向数据成员指针一样,我们使用classname::*的形式来声明一个指向成员函数的指针。类似于其他函数指针,指向成员函数的指针也需要指定目标函数的返回类型和形参列表。如果成员函数是const或者引用成员,我们必须将其const限定符或这引用限定符号包含进来。

  // 定义一个指向People类的返回值为int,形参为空的函数成员的指针
  // 出于优先级的关系People::*两段的括号必不可少。
  int (People::*get_age_ptr)() const;
  get_age_ptr = &People::get_age;

  // 定义一个指向People类的返回值为void,形参为int的函数成员指针
  void (People::*set_age_ptr)(int) = &People::set_age;

  // auto声明函数的指针
  auto get_name_ptr = &People::get_name;
  
  // 成员函数指针的使用,指针前后的括号必不可少,原因是掉用运算符的优先级高于成员运算的优先级。
  (p.*set_age_ptr)(20);
  (ptr_p->*set_age_ptr)(20);
  std::cout << (p.*get_age_ptr)() << " " << (ptr_p->*get_age_ptr)()
            << std::endl;
  std::cout << (p.*get_name_ptr)() << " " << (ptr_p->*get_name_ptr)()
            << std::endl;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值