zoukankan      html  css  js  c++  java
  • c++重点笔记3

    #include<iostream>
    #include<string>
    using namespace std;
    //运算符<<重载
    //全局函数重载
    
    class Person
    {
    public:
        string m_name;
        int m_age;
    };
    ostream& operator<<(ostream& out, Person& p)
    {
        cout << "name:" << p.m_name << endl;
        cout << "age:" << p.m_age << endl;
        return out;
    }
    void test()
    {
        Person per;
        per.m_name = "xiaohu";
        per.m_age = 20;
        cout << per<<endl;
    
    }
    void main()
    {
        test();
        system("pause");
    }

    运行结果:

    访问权限:

    public:类内类外都可访问

    protected:类内可以访问,类外不可访问,子类可以访问

    private:类内可以访问,类外不可访问,子类不可访问

    class的默认权限是私有,struct的默认权限是公有

    构造和析构函数有编译器自动调用,只调用一次;析构函数不可以有参数

    拷贝构造函数:构造函数的参数是该类的对象

                              Person (const Person & p){ }

                              使用情况:使用一个已经创建完毕的对象来初始化一个新对象      Person p1;  Person p2(p1);

                                                值传递方式给函数参数传值 void test (Person p){ }

                                                值方式返回局部对象  Person test( ){ }

    匿名对象:Person(10);当执行完该行代码,系统会立即回收掉匿名对象。   匿名函数对象:Person()(10);用在函数调用运算符()的重载

    c++编译器会自动给每个类添加至少3个函数,默认构造,析构函数,拷贝函数。如果定义了拷贝函数,系统不会提供其他构造函数;定义了有参构造,系统不会提供无参构造,会提供拷贝构造函数。

    浅拷贝:简单的赋值拷贝操作,问题:堆区的内容重复释放

    深拷贝:在堆区重新申请空间(new)),进行拷贝操作 ,解决浅拷贝问题

    析构函数将堆区开辟的数据做释放操作.

    静态成员变量:所有对象共享同一份数据,在编译阶段分配内存,类内声明,类外初始化

    静态成员函数:所有对象共享同一个函数,只能访问静态成员变量         访问方式:类名::静态成员函数

    常函数内不可修改成员属性,在成员属性声明时加关键字mutable,在常函数中依然可以修改

    常对象只能调用常函数

    对象成员:先调用对象成员的构造,再调用本类的构造函数;调佣析构函数正好相反

    空对象占用内存空为1个字节,(分配空间是为了区分空对象之间占用内存的位置)

    this指针:

                指向被调用的成员函数所属的对象

                隐含在每一个非静态成员函数内

                用途:返回对象本身     *this

                          形参与成员变量重名时,可用来区分

                本质:指针常量

    运算符重载:operator 符号

                        也可以函数重载

                         左移运算符<<重载:void operrator<<(ostream cout,Person &p)

                         重载前置运算符++返回引用,是为了一直在对一个数据进行递增操作

                         void operator++(int)  int 是站位参数,用于区分前置和后置递增

    仿函数:就是对函数调用运算符重载()

                   由于重载后使用的方式非常像函数的调用,固此称为仿函数。

               

                

  • 相关阅读:
    iOS中block实现的探究
    [ES6] 19. for ... of
    [ES6] 18. Map
    [ES6] 17. Set
    [ES6] 16. Object Enhancements
    [MEAN Stack] First API -- 5. Using $resource to setup REST app
    [AngularJS] Provider
    [MEAN Stack] First API -- 4. Organize app structure
    [AngularJS] ngCloak
    [Angular-Scaled Web] 9. Control your promises with $q
  • 原文地址:https://www.cnblogs.com/0901-hcx/p/14959837.html
Copyright © 2011-2022 走看看