C++创建类的对象的两种方法


创建类

现有一个学生类Student,它的定义如下:

class Student{
    private:
    char *name;
    int age;
    float score;
};

常见的C++创建类的对象的两种方法如下:

第一种:

Student stu;
stu.name = “xiaoming”;
stu.age = 20;
stu.score = 90.0;

第二种:

Student *stu1 = new Student;
stu1->name = “Xiaoming”;
stu1->age = 20;
stu1->score = 90.0;

两种方法的区别在于第一种创建变量的方式是在栈上创建对象,而第二种方式是在堆上创建对象

在栈上创建的对象,都有自己的名字,因此直接使用该名字即可访问它,常用直接成员运算符(.)访问此类型的对象,例如:stu.name;但是在堆上创建的类的对象,没有名字,只能得到一个指向该对象的指针,所以必须使用一个指针来接收变量的指针,否则将无法访问该对象。通常情况下,在堆上创建一个对象的同时,需要使用一个指针接收,这个接收的指针称为对象指针,可以通过间接成员运算符(->)访问它的成员变量或成员函数

 

堆和栈

在开始讲解两者之间的区别之前,需要先讲解一下内存中堆和栈的区别

所谓内存中的堆栈并不是数据结构中的堆和栈,而是内存中的堆区和栈区,这一点是很重要的,学过数据结构的可能会将其混淆,必须明确两者是不同的概念;

程序在内存中的存储分区

    

程序在内存中存储示意图

    

总结

第一种方法是在栈上创建的对象,在程序进行编译的时候就为其分配了地址空间,无论是否使用该类,它都将占用内存空间,属于静态联编,可以使用成员运算符'.'访问其成员,不需要添加new运算符

第二种方法是在堆上创建的对象,在程序运行过程中,如果需要,则向系统申请空间,否则不申请;它属于动态联编,可以使用'->'访问其成员,需要在声明时添加new运算符

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值