C++中的匿名对象(学习笔记)

1:基本概念

2:匿名对象的用法

3:注意事项和延伸

基本概念和性质:

匿名对象又称为,临时对象。所谓匿名对象就是省去对象名称,就是指主要形式上的特点是。在实例化时,类名(),如类名为complay。匿名对象complay();。一般情况下,匿名对象的生存周期只有一行。接下来一行后。就会自动调用析构函数。释放这一部分内存。

匿名对象的用法:

#include <iostream>

using namespace std;
class student
{
    public:
    int p_a1;
    int p_a2;
    int p_a3;
    int fun1(void)  /*这里使用了一个默认参数列表*/
    {
        p_a1=1;p_a2=2;p_a3=3;
      return  p_a1+ p_a2+ p_a3;
    }
    /*声明一个构造函数,用来在用例初始化时,给成员变量初始化*/
    student(int G_a1,int G_a2,int G_a3);

};
student::student(int G_a1,int G_a2,int G_a3):p_a1(G_a1),p_a2(G_a2),p_a3(G_a3)
{

}



int main()
{   /*创建匿名对象*/
    int sum1,sum2;
    /*使用匿名对象,调用函数,和对类中的成员变量赋值*/
    sum1=student(0,0,0).fun1();
    sum2=student(0,0,0).fun1();
    int Value1=(student(4,5,6).p_a1);
    int Value2=(student(7,8,9).p_a2);
    int Value3=(student(10,11,12).p_a3);

    cout << "输出sum1的值:"<<sum1<< endl;
    cout << "输出sum2的值:"<<sum2<< endl;
    cout << "输出value1的值:"<<Value1<< endl;
    cout << "输出value2的值:"<<Value2<< endl;
    cout << "输出value3的值:"<<Value3<< endl;
    return 0;
}

匿名使用场景如下:我们使用student(),创建一个匿名对象,然后使用这个匿名对象,调用fun1()。这样做的好处有两个:

1)如果仅是暂时需要一个对象来,调用函数,或对变量进行赋值时。我们就可以创建匿名对象

2)匿名对象,生存周期只有行代码,下一行就会自己释放内存,从而节省内存空间。

匿名对象还有如下定义方式

  • (new student(30, 15, 90)) -> fun1();
  • (new student(30 16, 80)) -> fun1();
  • (new student(30, 16, 99)) -> fun1();
  • (new student(30, 14, 60)) -> fun1();

先使用new开辟一段堆内存,然后指定 开辟类student的实例对象,此时对象已经创建成功,用括号传递实参给构造函数。整体此时还要加上一个括号,此时new放回一个指针(该指针指向开辟内存的首字节的地址)。到这一步之后,我们得到了一个指针变量。于是我们将这个指针,指向类中定义的函数。

根据上面代码,我们可以知道匿名函数定义时,也是能够使用构造函数,为对象中的成员赋值。

我们知道。同一个对象student,实例化 两个实例对象a1和a2。

class student a1,a2;//注意a1和a2之间用","隔开。

a1=a2;//此语句是合法操作

//由此我们想到,匿名对象是否可以赋值给有名对象(前提是他们是基于同一class创建出来的)

class student stu_3=student(1,2,3)   /*这里有一个隐藏的知识点,有名的对象可以在最前面+class,虽然也可以不加(c++语法同时兼容加class或不加),但是匿名对象在创建时,必须不能加class,从这里就可以看出来c++语法上的复杂,这也让我们这些初学者产生了学习上的困难*/

class student stu_4= 2023; //这种叫做隐式转换,可以暂时理解为class student stu_4=student(2023,0,0);我滴妈呀。真搞不懂c++为什么搞出那么多复杂的概念,和看起来很无厘头的语法。真是让人奔溃。 

匿名对象有常属性,所以引用匿名对象只能 const 引用。这里又涉及到引用的相关知识,后面再说吧!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值