
问一个C++中new classname的用法
我声明了一个类aaa,发现在main函数中使用int*p=newaaa和int*p=newaaa()都能编译运行,请问带括号何不带括号有什么区别?代码如下:#includ...
我声明了一个类aaa,发现在main函数中使用int*p=new aaa和int*p=new aaa()都能编译运行,请问带括号何不带括号有什么区别?
代码如下:
#include<iostream>class aaa{public: void chengyuan(){ std::cout<<"调用成员函数"<<std::endl; }};void main(){ aaa*p=new aaa; //此句改为aaa*p=new aaa();也能编译运行,为什么?有什么区别? p->chengyuan();} 展开
代码如下:
#include<iostream>class aaa{public: void chengyuan(){ std::cout<<"调用成员函数"<<std::endl; }};void main(){ aaa*p=new aaa; //此句改为aaa*p=new aaa();也能编译运行,为什么?有什么区别? p->chengyuan();} 展开
1个回答
展开全部
对于类而言 new的时候或者定义的时候 采用
aaa*p=new aaa
aaa*p=new aaa();
这两种效果相同
都是会调用类aaa中的无参构造函数
和直接定义
aaa a; aaa a();
效果一样的
aaa*p=new aaa
aaa*p=new aaa();
这两种效果相同
都是会调用类aaa中的无参构造函数
和直接定义
aaa a; aaa a();
效果一样的
更多追问追答
追问
那么在使用类对象的时候,是否可以用构造函数代替呢?
比如孙鑫视频Lesson3,用CButton类的一个对象调用
Create( LPCTSTR lpszCaption,
DWORD dwStyle, const RECT&
rect, CWnd* pParentWnd, UINT
nID )函数创建按钮,其中第三个参数rect直接用CRect(0,0,100,100)赋值
请问这里怎么理解呢
追答
定义类对象 或者new出一个类对象时 即需要调用构造函数情况下 可以通过()中加入参数列表的方式 指定构造函数
在定义之后 就不能使用这种方式了
比如
aaa a;//这里定义了a 并调用了无参构造
然后如果再调用
a(1,1) 这样不会去调用构造函数 而是会查找是否有()重载 如果没有 则会报错
至于你说的 直接用CRect(0,0,100,100)
进行赋值 实际上不是赋值 而是定义了一个临时无名对象,并用(0,0,100,100)构造
这中临时无名对象必须是const的 否则回出错
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询