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

来源:互联网 发布:淘宝企业店铺客服电话 编辑:程序博客网 时间:2024/05/22 03:18

其实一直没有系统的学习过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_ptrweak_ptr

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

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

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

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

0 0
原创粉丝点击