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掉,减少内存的负担。

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



原文地址:https://www.cnblogs.com/bwjblogs/p/12725378.html