关于最近自己接触到的几个知识点

本文介绍了C++中的友元概念及其应用场景,探讨了如何利用友元提高程序效率并解决类间权限问题。同时,文章还概述了几种智能指针(unique_ptr、shared_ptr、weak_ptr)的基本特性和用途。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

其实一直没有系统的学习过c++,就开始撸代码了。正好公司另外一位原来纯c的小伙伴想学习c++,共同学习吧,把这两天学到的东西巩固下。

友元

其实说实话在前天我都不知道还有这个东西。百度了一下:

友元函数是能够访问类中的私有成员的非成员函数。友元函数从语法上看,它与普通函数一样,即在定义上和调用上与普通函数一样。
友元关系不具对称性。即 A 是 B 的友元,但 B 不一定是 A 的友元。 友元关系不具传递性。即 B 是 A 的友元,C 是 B 的友元,但是 C 不一定是 A 的友元。
作用及特点
友元提供了不同类的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。通过友元,一个不同函数或另一个类中的成员函数可以访问类中的私有成员和保护成员。c++中的友元为封装隐藏这堵不透明的墙开了一个小孔,外界可以通过这个小孔窥视内部的秘密。
友元的正确使用能提高程序的运行效率,但同时也破坏了类的封装性和数据的隐藏性,导致程序可维护性变差。

这是在百度百科上面的解释。

#include<iostream>
#include<cmath>
using namespace std;
class Point
{
public:
    Point(double xx, double yy)
    {
        x = xx;
        y = yy;
    };
    void Getxy();
    friend double Distance(Point &a, Point &b);
private:
    double x, y;
};
void Point::Getxy()
{
    cout << "(" << x << "," << y << ")" << endl;
}
double Distance(Point &a, Point &b)
{
    double dx = a.x - b.x;
    double dy = a.y - b.y;
    return sqrt(dx*dx + dy*dy);
}
int main(void)
{
    Point p1(3.0, 4.0), p2(6.0, 8.0);
    p1.Getxy();
    p2.Getxy();
    double d = Distance(p1, p2);
    cout << "Distance is" << d << endl;
    return 0;
}

这是百度上面的例子。
我自己的理解是这样的:友元可以直接访问某个对象的私有的成员。(等于是开启了上帝模式?),在类之外还开辟了一条路,但是又不像public那么开放,谁都可以进行读写。自觉这个特性比较尴尬。

这是过了几天更新的,真是打自己脸
正好用到了友元,所以来更新一发,一般程序的一些比较重要的变量都会读出来提供给全局,但是前段时间因为类之间的权限的问题跟软件开发的便捷的问题上我犯起了纠结,一开始的方案想的是
声明一个静态类,变量全部放在public里面的话,全局都可以调用,但是全局可以修改,不合适。如果放做private再加个public的get的话,不加public的set的话,就是全局可读但是谁都不能修改。加public的set的话就跟pubilc的全局变量一样了。说的有点乱。

如果加上友元的话 就不一样了
在允许修改全局变量的地方添加友元,其他的地方只需要提供一个public的get就可以了。我先试试,这样应该就问题不大了。

买表 static 跟friend 不能一起用

auto

自动推导参数的类型。可以

auto a = 1;
auto b = "string";
auto c = 1.11;

自动推导类型,听起来灰常牛逼,等在项目中使用了再说。

智能指针:

unique_ptr   
share_ptr
weak_ptr

unique_ptr :感觉这个类似于垃圾回收机制,c#中的arc之类的,自动进行释放,这个指针不能进行赋值,可以使用move函数转移给其他指针,

share_ptr:可以同时又多个指针指向某一块地址,并且开始使用引用计数。
weak_ptr:配合share_ptr使用,可以用lock函数获取到share_ptr的内容,但是不增加引用计数。

先写到这儿吧,边理解边写,加油。

如果那又有错误,有劳指教。谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值