zoukankan      html  css  js  c++  java
  • (9)C++ 对象和类

    一、类 

    1.访问控制

    class student {
        int age;//默认私有控制
    public:
        string name;
        double weight;
    };

    2.成员函数

    • 定义成员函数时,使用::标识函数所属的类
    • 类方法可以访问类的private组件

    成员函数声明与普通函数相同,定义时分类外定义和类内定义

    类内定义,在类中声明的函数都是默认都是内联函数(加上inline)

    #include<iostream>
    using namespace std;
    class student {
    public:
        int sum(int a, int b) {
            return a + b;
        }
    };
    
    void main() {
        student stu;//创建对象
        int a=stu.sum(3, 4);
        cout << a << endl;
    }

    类外定义

    #include<iostream>
    using namespace std;
    class student {
    public:
        int sum(int a,int b);//函数声明
    };
    
    inline int student::sum(int a, int b) {//类外定义
        return a + b;
    }
    
    void main() {
        student stu;//创建对象
        int a=stu.sum(3, 4);
        cout << a << endl;
    }

    再强调下内联函数的作用:内联函数和普通函数的区别在于:当编译器处理调用内联函数的语句时,不会将该语句编译成函数调用的指令,而是直接将整个函数体的代码插人调用语句处,就像整个函数体在调用处被重写了一遍一样。有了内联函数,就能像调用一个函数那样方便地重复使用一段代码,而不需要付出执行函数调用的额外开销。很显然,使用内联函数会使最终可执行程序的体积增加。以时间换取空间,或增加空间消耗来节省时间,这是计算机学科中常用的方法 。

    二、构造函数和析构函数

     1.构造函数

    为了隐藏数据,并且在创建时进行初始化,创造了构造函数的功能.

    (1)使用带参构造函数

    #include<iostream>
    using namespace std;
    class student {
        int m_a = 1;
        int m_b = 1;
    public:
        student() {
    
        }//默认构造函数
        student(int a, int b) {
            m_a = a;
            m_b = b;
        }//带参构造函数
        int sum() {
            return m_a + m_b;
        };
    };
    
    void main() {
        student stu1 = student{1,1};//1.显示调用构造函数
        int a1 = stu1.sum();
        cout <<"显示调用构造函数 "<< a1 << endl;
    
        student stu2 ( 2,2 );//2.隐式调用构造函数
        int a2= stu2.sum();
        cout << "隐式调用构造函数 " << a2 << endl;
    
    
        student *stu3 = new student(3, 3);//3.动态调用构造函数
        int a3=stu3->sum();
        cout << "动态调用构造函数 " << a3 << endl;
    }

    (2)默认构造函数

    class student {
    public:
        student() {
            cout << "调用构造函数"<< endl;
        }
    };
    
    void main() {
        //调用默认构造函数的几种方式
        student stu1;
        student stu2= student();
        student *stu3 = new student;
    }

    注意

    student stu1();//这是一个返回student对象的函数,而不是构造函数

     c++11 列表初始化

    student stu1 = { 3,5 };

    2.析构函数

    #include<iostream>
    using namespace std;
    class student {
    public:
        student() {
            cout << "调用构造函数"<< endl;
        }
        ~student() {
            cout << "调用析构函数" << endl;
        }
    };
    
    void main() {
        {
            student stu1;//这是一个返回student对象的函数,而不是构造函数
        }
    }

    3.const成员函数 

    const成员函数内不运行修改成员属性,被添加mutable的成员函数可以被const函数修改

    void sum(int &a,int b) const {//const放在方法的后面,使得该程序下成员函数不能被修改
        a = 200;
    }

    const指针修饰的是被隐藏的this指针所指向的内存空间,修饰的是this指针

    三、this指针

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

    this指针隐含每一个非静态成员函数内的指针。

    用途:

      this 同名参数

      类的非静态成员函数中返回对象本身,可用return *this

    四、对象数组

     

    五、类作用域

    六、抽象数据类型

     文件头类声明

  • 相关阅读:
    Django的FBV和CBV
    爬虫-----selenium模块自动爬取网页资源
    python摸爬滚打之day33----线程
    python摸爬滚打之day032 管道 数据共享 进程池
    python摸爬滚打之day030----进程
    爬虫重复请求超时
    指定页面刷新时间前端
    requests post请求,加上会话功能 以及url 编码问题
    爬虫常用mysql
    python操作excel以及word文档,pdf文档
  • 原文地址:https://www.cnblogs.com/buchizaodian/p/11549201.html
Copyright © 2011-2022 走看看