C++中new一个类的指针,有何没有括号有什么区别?
classA{public:A():a(1),b(2){cout<<"A的构造函数被执行"<<endl;};~A(){cout<<"A的析构函数被执行"<<endl;};...
class A
{
public:
A():a(1),b(2){cout<<"A的构造函数被执行"<<endl;};
~A(){cout<<"A的析构函数被执行"<<endl;};
virtual void x(){cout<<"a->x"<<endl;}
virtual void y(){cout<<"a->y"<<endl;}
virtual void z(){cout<<"a->z"<<endl;}
void get_value(){cout<<a<<b<<endl;}
private:
int a;
int b;
};
比如这是类A
A *a=new A(); 我现在new一个指向A的对象的指针,那么new A()和new A有什么区别呢?都能运行啊 展开
{
public:
A():a(1),b(2){cout<<"A的构造函数被执行"<<endl;};
~A(){cout<<"A的析构函数被执行"<<endl;};
virtual void x(){cout<<"a->x"<<endl;}
virtual void y(){cout<<"a->y"<<endl;}
virtual void z(){cout<<"a->z"<<endl;}
void get_value(){cout<<a<<b<<endl;}
private:
int a;
int b;
};
比如这是类A
A *a=new A(); 我现在new一个指向A的对象的指针,那么new A()和new A有什么区别呢?都能运行啊 展开
展开全部
括号分为两种,中括号[]或小括号()。
为方便说明,定义指针类型为class test, 指针为
test *ptest;
一、 中括号的情况。
中括号是用来标示申请的是一个对象,还是一组对象。
1 没有中括号时,即ptest = new test; 这时ptest得到的是一个对象*ptest, 释放时使用delete ptest;
2 带有中括号时,在中括号中需要有一个正整数参数。
ptest = new test[N];
N可以是变量,也可以是常量。
这时申请到的ptest指向的空间是N个连续的对象ptest[0],ptest[1]...ptest[N-1],即可以当做一个数组使用。
释放时需要调用delete [] ptest;
二、小括号的情况。
小括号是用来指定初始化参数,用于类指针时,就是指定调用哪个构造函数。
1 有小括号时,小括号中可以有若干参数,也可以没有参数。
比如
ptest = new test(); 这样在构造时就会调用无参构造test();
ptest = new test(1); 就会调用构造函数test(int),即一个整型参数的构造函数。
2 没有小括号时,默认调用无参构造。
即
ptest = new test;
和ptest = new test();是一样的。
为方便说明,定义指针类型为class test, 指针为
test *ptest;
一、 中括号的情况。
中括号是用来标示申请的是一个对象,还是一组对象。
1 没有中括号时,即ptest = new test; 这时ptest得到的是一个对象*ptest, 释放时使用delete ptest;
2 带有中括号时,在中括号中需要有一个正整数参数。
ptest = new test[N];
N可以是变量,也可以是常量。
这时申请到的ptest指向的空间是N个连续的对象ptest[0],ptest[1]...ptest[N-1],即可以当做一个数组使用。
释放时需要调用delete [] ptest;
二、小括号的情况。
小括号是用来指定初始化参数,用于类指针时,就是指定调用哪个构造函数。
1 有小括号时,小括号中可以有若干参数,也可以没有参数。
比如
ptest = new test(); 这样在构造时就会调用无参构造test();
ptest = new test(1); 就会调用构造函数test(int),即一个整型参数的构造函数。
2 没有小括号时,默认调用无参构造。
即
ptest = new test;
和ptest = new test();是一样的。
展开全部
没有区别,new A()显式的调用构造函数,
new A隐式的调用构造函数,都是调用A():a(1),b(2){cout<<"A的构造函数被执行"<<endl;};
假如calss A还有一个构造函数
A(int i, int j):a(i),b(j){cout<<"A的构造函数2被执行"<<endl;};
那么new A(1,1)和new A就不一样了,调用的构造函数不一样,但是new A和new A()还是一样
new A隐式的调用构造函数,都是调用A():a(1),b(2){cout<<"A的构造函数被执行"<<endl;};
假如calss A还有一个构造函数
A(int i, int j):a(i),b(j){cout<<"A的构造函数2被执行"<<endl;};
那么new A(1,1)和new A就不一样了,调用的构造函数不一样,但是new A和new A()还是一样
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有括号可以初始化A类对象里面的值
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是个梗表示程序猿找不到(对象)女朋友
同行会告诉你new(创建)一个对象下面这个对象在程序猿眼里其实就是一段程序或表格很残酷的嘲讽
同行会告诉你new(创建)一个对象下面这个对象在程序猿眼里其实就是一段程序或表格很残酷的嘲讽
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询