c++new操作符的问题 例如A,B是两个类,那么A* m = new B这个句子是怎么调用A,B

c++new操作符的问题
例如A,B是两个类,那么A* m = new B这个句子是怎么调用A,B的构造函数的?

如果A是B的基类(只有基类指针或引用可以指向本类及其派生类)
那么先会构造基类;
即先调用A的构造函数
再调用B的构造函数追问

这句话是什么意思可以解释下嘛?还有如果delete m,他们的析构函数是怎么调用的?

追答

调用b在调用a的

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-10-23
你这个的前提是A类要是B类的基类
类在调用构造函数时会先调用其基类的构造函数,就像盖楼从下往上追问

这句话是什么意思可以解释下嘛?还有如果delete m,他们的析构函数是怎么调用的?

追答

析构就像拆房子 从上往下 先自己 后基类

第2个回答  2014-10-23
::

c++中使用new后的强制类型转换问题
(比如说,如果题中的类A是抽象类,使用A *a=new A()是错误的,只能使用A *a=new B()来创建类A类型的对象实例。)关于题目:这个题目中的程序在运行时可能出现的问题是:类B中的函数f与从类A继承的函数f同名(且参数、返回值都相同,不存在重载的问题),而且不是重写(类A中的函数f不是虚函数...

C++中两个类如何相互引用?
如果是函数的话, 一个函数A想要调用另一个函数B, 只需要保证A的实现代码前面有B的声明就可以了; 因为常用函数的声明是只含参数代码的(除非A的参数有B的函数指针, B也同样, 这样肯定不能互相调用, 他们之中肯定有一个不知道那个函数指针的类型 ), 互相包含的代码一般在定义(实现)中, 故保证所有...

2个C++文件间参数如何传递,比如a.cpp中a[]="hello",char *b=a,如何...
你的补充问题中,推荐答案中已指出,不能将a,b两指针定义为函数局部变量,extern跨域也是文件域,不是函数域。http:\/\/zhidao.baidu.com\/question\/463226362.html?oldq=1 你可以看下这个帖子的问题和回答,应该会对你有帮助。

c++ 输入a,b两个整数,求a的b次方 我超了int的界 想到用字符串处理,但是...
两个大整数相乘更好的做法是用int数组实现,将大整数位数分段,每段用一个int实现,只需保证每段的平方不溢出即可。每段相乘结果超过段长的就向下一个int进位。该做法附加操作少,直接调用硬件的操作多,程序运行效率高。正常的做法是一个int表示多位,为了编程方便,一个int只表示一位,区别并不本质 ...

C++中 new的机制以及虚函数相关问题提问
A *a = new A(); a是A类型的指针,不是A类型对象,new出来的堆内存块才是A类型的对象。A a;此时a才是A类型对象。言归正传:a不是A类的对象,a是A类型的指针,它可以用来指向A类对象和A类的派生类对象,也即是说,可以将A类或A类的派生类的对象的地址赋值给A类型指针a。虚函数就是用来实现...

...会用a无星号形式,请问有何不同。 例如*a=b *a=*b
其实C代码编译成二进制后是不分类型的。指针的值就是虚拟存储的一个地址,地址也是值,也可以放在内存里。a=b就是说指针a所指向的地址里的内容换成b;a=*b就是说将指针b指向的地址里的内容放到指针a所指向的地址里;至于**a=*b,就是说,a指向的地址里存放的也是个地址,如果设这个地址为c,...

C\/C++这个函数起到什么作用?
所以,class B的print()也成了虚函数。那么对于在派生类的相应函数前是否需要用virtual关键字修饰,那就是你自己的问题了。现在重新运行main2的代码,这样输出的结果就是This is A和This is B了。现在来消化一下,我作个简单的总结,指向基类的指针在操作它的多态类对象时,会根据不同的类对象,调用其相应的函数,...

用C++写一个程序,输入两个整型a,b和一个字符 当输入A时输出a+b的值...
include<iostream> using namespace std;void main(){ int a,b;char c;cin>>a>>b>>c;if(c=='A')cout<<a+b;else if(c=='B')cout<<a-b;else if(c=='C')cout<<"NO";else cout<<"error!";}

C++语言中,new表示什么的关键字?
public:A(int _i) :i(_i*_i) {} void Say() { printf(\\"i=%d\\\\n\\", i); } };\/\/调用new:A* pa = new A(3);那么上述动态创建一个对象的过程大致相当于以下三句话(只是大致上):A* pa = (A*)malloc(sizeof(A));pa->A::A(3);return pa;虽然从效果上看,这三句...

C++中怎么用new函数定义一个二维数组?
假设a,b为两个int型变量,如果希望这样生成一个二维数组:new int[a]<b>,是不会得到编译器允许的——因为没有指定这个数组的元素类型。由于b的大小未知,编译器无法确定‘int<b>’到底是一个什么类型。所以,要用new创建一个二维数组。方法一:使用常量 接上:如果将b指定为一个常量,例如new ...

相似回答