c++入门-类

一、类

  • c++中可以使用struct、class来定义一个类
  • struct和class定义类的区别:前者默认成员权限是public,后者默认成员权限是private
#include 
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;
}
c++入门-类_第1张图片
示例.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、自动分配和回收
  • 堆空间
    需要主动去申请和释放
c++入门-类_第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++入门-类)