2

int一个class

请考虑以下代码

#include"iostream"

using namespace std;

class test{
public:
    int a;

    test(int x)
    {
        cout<<"In test Constructor"<<endl;
        a = x;
    }
};

int main()
{
    test *obj = new test(10);// Constructor get called 
int *x = new int(10);    // Expecting the same if "int" is a class
return 0;
}
4

4 回答 4

4

不,int不是class,并且int x = new int(10);不是有效的 C++ 语法。

int* x = new int(5);
...
...
delete x;

这只是创建一个指向 an 的指针,int并且new int(5)是一种初始化指针的方法。

而正确的方法应该是 delete[] x;

不,因为你用new, not分配了它new[]。正确的方法是int x = 5;int x(5);- 除非确实有必要,否则避免动态分配。

于 2013-01-17T11:44:43.393 回答
1
Is int a class in c++?

不,因为int不能被继承,不能在其范围内定义函数,并且缺少类必须具有的许多属性。

如果我们说:int *x = new int(5);它会调用 int 的构造函数吗?

它将用 初始化新整数5。它至少给出了构造函数的效果。但是为了迂腐,它不调用构造函数。对于new int[10]它不调用构造函数并且10整数的值是实现定义的情况。但是new int[10]()会将值初始化(即 0)到所有 10 个整数。

正确的方法应该是 delete[] x

不。任何数据类型的正确配对是malloc()/free()new/delete和。其余都是未定义的行为。new[]/delete[]new(<placement>) T/ ~T()

于 2013-01-17T11:49:11.713 回答
0

int, float,char都不是classcpp 中的。
您不能输入以下内容:
int x=new int(10);

即使您在此处考虑一个类:以下内容无效:
Class x=new Class(10);

Class x=new Class(10);//"new " not "new ...[]"because,
                       // It is just a single object not array.
...
delete x;//Not delete[] x;because x is not array

你的期望是正确的,但如果只有当int是一个类,但它不是

于 2013-01-17T11:52:12.593 回答
0

不,C++ 的基本类型(charintlongfloatdouble等)不是类。

但是,该语言的设计方式使得差异几乎可以忽略不计。最重要的区别是

  • 基本类型不能有成员。类可以(并且通常会)。
  • 基本类型不能指定为基类。
于 2013-01-17T13:11:20.633 回答