c++入门-类

作者: 昵称_7baf | 来源:发表于2018-11-09 00:14 被阅读0次

    一、类

    • c++中可以使用struct、class来定义一个类
    • struct和class定义类的区别:前者默认成员权限是public,后者默认成员权限是private
    #include <iostream>
    using namespace std;
    
    struct Person {
        int m_id;
        int m_age;
        int m_height;
        
        void display() {
            cout << "m_id" << m_id << endl;
            cout << "m_age" << m_age << endl;
            cout << "m_height" << m_height << endl;
    
        }
    };
    
    class Student {
        int m_id;
        int m_age;
        int m_height;
        
        void display() {
            cout << "m_id" << m_id << endl;
            cout << "m_age" << m_age << endl;
            cout << "m_height" << m_height << endl;
            
        }
    };
    
    int main(int argc, const char * argv[]) {
    //    创建对象
        Person person;
        person.m_id = 10;
        person.m_age = 20;
        person.m_height = 30;
        person.display();
        
        Student student;
        student.m_id = 10;
        student.m_age = 20;
        student.m_height = 30;
        student.display();
    
        return 0;
    }
    
    示例.png

    要想class声明的变量可以被访问,可以在前面加个public

    class Student {
    public:
        int m_id;
        int m_age;
        int m_height;
        
        void display() {
            cout << "m_id" << m_id << endl;
            cout << "m_age" << m_age << endl;
            cout << "m_height" << m_height << endl;
            
        }
    };
    

    二、C++编程规范(参考规范)

    • 全局变量:g_
    • 成员变量:m_
    • 静态变量:s_
    • 常量:c_
    • 使用驼峰命名方法

    三、this

    • this 是指向当前对象的指针
    • 对象在调用成员函数的时候,会自动传入当前对象的内存地址
    struct Person {
        int m_id;
        int m_age;
        int m_height;
        
        void display() {
            cout << "m_id " << this->m_id << endl;
            cout << "m_age " << this->m_age << endl;
            cout << "m_height " << this->m_height << endl;
            
        }
    };
    

    三、封装

    • 成员变量私有化,提供公共的getter和setter给外界去访问成员变量
    class Teacher {
        
        int m_age;
        
    public:
        void setAge(int age){
            this->m_age = age;
        }
        
        int getAge(){
            return this->m_age;
        }
    };
        
        Teacher teacher;
        teacher.setAge(20);
        cout << teacher.getAge() << endl;
    

    四、内存空间的布局

    每个应用都有自己独立的内存空间,其内存空间一般都有以下几大区域 代码段(代码区)

    • 代码段(代码区)
      用于存放代码
    • 数据段(全局区)
      用于存放全局变量等
    • 栈空间
      1、每调用一个函数就会给它分配一段连续的栈空间,等函数调用完毕后会自动回收这段- 栈空间
      2、自动分配和回收
    • 堆空间
      需要主动去申请和释放
    内存布局

    四、堆空间

    • 在程序运行的过程中,为了能自主的控制内存的生命周期和大小 会经常使用堆空间内存

    • 对空间的申请和释放
      1、malloc/free
      2、new/delete
      3、new []/delete []

    • 注意
      1、申请空间成功后,会返回那一段内存的空间地址
      2、申请和释放必须是一对一的关系,不然会内存泄露

    五、memset

    • memset函数是将较大的数据结构(比如对象、数组等)内存清零的比较快的方法
      Person person;
       person.m_id = 1;
       person.m_age = 10;
       person.m_height = 30;
       
       memset(&person, 0, sizeof(Person));
    
    

    六、对象的内存

    • 对象的内存可以存在于3种地方
    • 全局区:全局变量
    • 栈空间:函数里面的局部变量
    • 堆空间: 动态申请内存(malloc、new等)

    七、构造函数

    • 构造一般用于完成对象的初始化工作
    • 特点
      1、函数名与类名相同,无返回值,void都不能写,可以传参数,可以重载,可以有多个构造函数
      2、一旦定义了构造函数,必须用其中一个自定义的构造函数来初始化对象
      3、通过malloc分配空间的对象不会调用构造函数
      4、如果自定义了构造函数,除了全局区,其他内存空间的成员变量默认都不会被初始化,需要开发人员手动初始化
    
    struct Person {
        int m_age;
        
        Person(){
            cout << "Person()" << endl;
        }
        Person(int age){
            cout << "Person(int age)" << endl;
        }
    };
    

    相关文章

      网友评论

        本文标题:c++入门-类

        本文链接:https://www.haomeiwen.com/subject/xqwgxqtx.html