zoukankan      html  css  js  c++  java
  • C++创建及访问动态对象

    创建动态对象

    在此之前我们创建一个对象的语法是:

    Class object(arguments);
    //Class是类名
    //object是对象
    //(arguments)是传入的参数,这一部分可以没有

     现在我们想要动态的创建对象,还是要使用到关键字new。语法如下:

    //无参构造函数
    ClassName* pObject = new ClassName;
    //无参构造函也可以写为:
    //ClassName* pObject = new ClassName();
    //有参构造函数 ClassName* pObject = new ClassName(arguments);

    访问动态对象

    与之前的方式还有一个区别在于,之前的方法返回的是一个对象,而现在返回的是Class类型的指针,这个指针指向所创建对象的位置。因此,如果我们想要使用这个对象,就先要使用解引用运算符(*)先获取到对象,再使用点操作符(.)来操作对象的属性和方法。

    //string相比其他的基本数据类型比较特殊,C++中的string本身就是一个类
    //为了方便,我们直接使用string类
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        //有参构造函数
        string* pString = new string("abcdef");
        cout << "字符串为:" << *pString << endl;
        cout << "字符串的长度为:" << (*pString).length() << endl;
        return 0;
    }

    运行结果:

    但是这样一来,似乎显得有些麻烦,必须要先解引用得到对象本身才可以操作。因此,C++提供了一个成员选择操作符("->",一个短划线"-"后面跟一个大于号">"),它的作用就在于简化指针访问对象成员。如上面的例子中的:

    cout << "字符串的长度为:" << (*pString).length() << endl;

    可以写为:

    cout << "字符串的长度为:" << pString->length() << endl;

    为什么要动态创建对象

    说到这里,还没有说为什么要动态创建对象。你可能会说,这样创建不就是使用了new吗?和原来没什么区别啊?

    其中的奥妙就在于new这个关键字上。我们知道new这个关键字会动态的分配一段内存空间,而这是之前静态创建对象无法做到的。也就是说,静态创建对象的内存不是由程序员来管理的,而是在编译的过程中完成的。但是动态的不一样了,它是在运行时完成的,我们可以动态的管理它的内存空间。

    如果一个程序静态创建了10000个对象,那么可能内存就不够用了,因为没有办法去销毁他们。但是使用动态的方式,我们就可以即时delete掉,减少内存的负担。

    还有一点是,如果用户想要在运行时创建对象,那么就只能使用动态创建对象的方式。这和之前我们动态创建一个数组的内存空间类似。



  • 相关阅读:
    洛谷 P1144 最短路计数
    浅谈最短路计数问题
    洛谷 P1608 路径统计
    洛谷 P6863 [RC-03] 上下求索
    浅谈差值DP
    洛谷 P1651 塔
    JDOJ 1222: VIJOS-P1037 搭建双塔
    浅谈常见字符串处理函数
    浅谈各种浮点数运算函数
    洛谷 P6859 蝴蝶与花
  • 原文地址:https://www.cnblogs.com/bwjblogs/p/12725378.html
Copyright © 2011-2022 走看看