已采纳回答 / 慕前端4039174
如果没有自定义析构函数,系统会自动生成一个默认的析构函数,在删除对象时运行。它并不是没有运行,你是在栈上定义的对象,所以在整段程序结束时系统再会调用析构函数,你只是没有看到而已(此时程序还没运行完),如果用在堆上定义,在释放内存时会看到调用的。
2016-02-03
已采纳回答 / 张土土
1、Array arr1 当实例化一个arr1的时候,因为有Array Array::printInfo()存在,系统会创建一个Array类的隐形变量,我们姑且用arr2来表示隐形变量,这时arr1和arr2指向的是不同的地址,有点类似于windows的复制操作。 系统执行arr1.printInfo( return * this)的时候,其实相当于arr1.printInfo( &arr2=*this; return arr2; ),所以arr1.printInfo().setlen(5)就是a...
2016-01-07
已采纳回答 / DoDream
因为要调用父类的有两个参数的那个构造函数,如果初始化放在子类的构造函数中而不用初始化列表,很难调用父类的有两个参数的那个构造函数,当然你可以在子类的构造函数中这样写:m_coorA.x = x1;m_coorA.y = y1;m_coorB.x = x1;m_coorB.y = y1;这样写可以达到初始化的目的,但写的代码就多了,直接调用父类的有两个参数的那个构造函数就简单多了,所以选择用初始化列表。
2015-11-26
已采纳回答 / Power12138
第一个问题:new指的是在堆中分配m_iCount个int内存单元,这块内存单元的首地址赋给m_pArr指针变量,这样子的会就可以通过m_pArr去访问这块内存单元第二个问题,答案是一样的,第二个更加细节的描述就是第一个那样子去写
2015-11-23
已采纳回答 / onemoo
const对象是一旦被构造出来,其值就不能被改变了。而构造初始化列表就是用来构造成员变量的,对const成员来说,初始化列表中提供的值就作为构造它们的初值。所以这里并不是赋值操作。
2015-10-30
已采纳回答 / 一曲幽魂付衷情
A *a=new A; 和 A *a=new A(); 都是调用A类的默认构造函数!!!!但是如果单独声明一个A 类变量,如:A a;则调用的是默认构造函数,但是不能写成 A a()来调用默认构造函数!!因为这种形式会被识别成一个:名称为a的不接受任何参数,返回值为A类型的函数!!!
2015-10-18
已采纳回答 / onemoo
可以直接返回Array,但这样并不好。&这表明返回的是array引用。类成员函数有时打算返回类实例自身,就会返回*this的引用。而有时并不一定需要返回自身,但仍会选择返回引用,原因如下:函数在返回值的时候,是先用你要返回的变量去构造一个临时变量,再将这个临时变量返回给接受返回值的调用者。在调用者使用过后,这个临时变量再被自动销毁。如果返回的是一个很大的类实例的话,构造这个临时变量会调用拷贝构造函数,这可能造成很大的运行开销(例子中的情况下array会被整个复制一遍)。为了减少这种负面影响,在一些...
2015-10-17
已采纳回答 / onemoo
不用包含.cpp文件,实际上根本不应包含任何含有实现的文件。Coordinator.h 中含有Coordinator类的定义(不是类实现)。C++中的符号只要提前声明就可使用。对类来说,有了类定义就可以使用这个类。对函数来说,有了函数原型的声明,就可以进行函数调用。把函数和类的声明单独写在 .h 文件中就是为了让其他想要使用它们的源文件只要include这些“头文件”就可以使用了。
2015-09-11
已采纳回答 / onemoo
这个pCoor只是指针本身是const,并不是所指的对象是const的。所以只是这个pCoor本身不能更改(不能指向其他Coordinate对象),而pCoor所指的coor1是可以被更改的。所以调用普通成员函数没有问题。你所说的那种指针应该这样声明:<...code...>
2015-09-11
已采纳回答 / onemoo
这两种写法对于有默认构造函数的类对象来说没有区别,这两种写法都是调用其默认构造函数。所以如果Coordinate有默认构造函数,这样的写法就没区别。没有默认构造函数的话,这两种写法都编译不过。另外,这两种写法对于built-in类型是有区别的:不带括号时,构造的对象是default initialized,对于built-in类型,这种情况下初值是不确定的。带空括号时,对象是value initialized,对于built-in类型来说,初值一般是0。
2015-09-05