求助!C++中类的构造函数与创建动态对象的问题!

这是第一段代码

class a
{
private:
int i,j;
};
void main(void)
{
a *p;
p = new a;
}

下面是第二段代码
class a
{
public:
a (int x,int y)
{
i = x;
j = y;
}
private:
int i,j;
};
void main(void)
{
a *p;
p = new a(1,2);
}

问题是:第一段代码我没有定义构造函数 主函数中声明了a类型的指针*p
然后用new函数为p分配大小为a的动态内存 没有错误
第二段代码中 我声明了一个构造函数 同样在为p分配动态内存的时候 却必须加上 1,2两个初值了 这是什么原因 ?
如果我把第二段代码中的 p = new a(1,2);改成p = new a;系统就会报错!
可是如果我仅仅是想只分配一块大小为a的空内存 而 不给他赋予初值呢??我该如何实现?还有我想知道报错的原因!谢谢!!!C++初学者 小弟感激不尽!!

第一段代码 类a中你没有些构造函数,因此,编译器会替你自动添加一个默认的构造函数: a(void){},所以你在第一段的main函数中p = new a;时,实际上调用的是这个默认的构造函数a(void){},当然不需要参数。

第二段代码你自己写了构造函数,编译器就不会替你添加默认的构造函数,所以在main函数中p = new a(1,2);时,自然会调用你写的构造函数a (int x,int y)
{ i = x; j = y; },这个函数是有参数的,你不写函数直接调用当然会出现编译错误。

解决办法是:
在第二段代码的类a中定义多个构造函数,如下所示:
class a
{
public:
a (int x,int y)
{
i = x;
j = y;
}

a (void)
{
//初始化为默认值
i = 0;
j = 0;
}
private:
int i,j;
};

这样,你在main函数中p = new a;时,便会自动调用无参数的那个构造函数,这时就不会有编译错误了。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-07-21
如果你不写构造函数,系统会为你生成一个没有参数的默认构造函数
但是只要你写了构造函数,不管写的是有没有参数的,系统都不会为你生成任何构造函数。
也就是说第一段代码,你有一个系统生成的没有参数的构造函数
第二段代码,只有一个你自己写的两个参数的构造函数
为第二段代码添加a(){}就可以了

求助!C++中类的构造函数与创建动态对象的问题!
第一段代码 类a中你没有些构造函数,因此,编译器会替你自动添加一个默认的构造函数: a(void){},所以你在第一段的main函数中p = new a;时,实际上调用的是这个默认的构造函数a(void){},当然不需要参数。第二段代码你自己写了构造函数,编译器就不会替你添加默认的构造函数,所以在main...

c++中什么时候会调用构造函数
一种是在建立局部对象时,CTest c; \/\/这时会自动调用构造函数 一种是用new运算符在堆上分配对象时,CTest *p=new CTest; \/\/这时也会调用构造函数

C++类问题,构造函数的概念类问题。大神可不可以解释清楚一点
一个是默认构造函数,一个是默认复制构造函数,一个默认析构函数。像上面这个类,编译器认为是这样的:class MyClass{ int value;public:MyClass(int n):value(n){} int getValue()const{return value;} MyClass(){} \/\/这是默认构造函数 MyClass(const MyClass&){} \/\/默认复制构造函数 ...

c++~ 请问在类里面构造函数必须是public吗 可以定义到private吗_百度知...
可以定义到private,但定义成private会导致此类不能直接被外部实例化,解决方法如下:1、首先拷贝构造函数是一种特殊的构造函数,函数名与类名相同,它的一个参数必须是本类型的一个引用变量,无函数类型、返回值。2、对象通过另一个对象初始化。3、运行如下图所示。4、接着输入函数的参数为类对象。5...

在c++中创建了类,但在创建新对象时,编译显示:不存在默认构造函数
在c++中,如果你没有自定义构造函数,那么系统会给你的类提供一个默认的无参数的构造函数,你现在已经自定义了一个有参数的构造函数:Stock(char[] );有两种解决办法:一:你再显式定义一个无参数的构造函数,比如 Stock::Stock(){ Symbol = "默认股票名";price = 0.0;} 二、你按照正确...

c++什么叫构造函数,它的作用是什么
c++类的构造函数详解 一、 构造函数是干什么的class Counter{public: \/\/ 类Counter的构造函数 \/\/ 特点:以类名作为函数名,无返回类型 Counter() { m_value = 0; } private: \/\/ 数据成员 int m_value;} 该类对象被创建时,编译系统对象分配内存空间,并自动调用该构造函数->由构造函数完成成员的初始化工作...

C++中用new运算符创建一个类的数组指针会调用类的构造函数吗
当然会执行,不论是什么情况,只要你实例化了一个类也就是当你创建了一个对象时,就会自动调用构造函数。

C++中一个类最多几个构造函数?
C++中一个类可以有很多个构造函数,但是参数一定要不一样。编译器会自动提供两个构造函数:默认构造函数和复制构造函数。析构函数只能有一个。C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。C++支持多种编程范式 --面向对象编程、泛型编程和过程化编程。其编程领域众广,常用于系统开发,...

c++中的构造函数和析构函数是什么时候被调用的?
构造函数:只在创建对象的时候才会调用,其他情况不允许调用。析构函数:笼统的说是销毁对象的时候进行调用。但是调用的时间不一定一样,有些时候当退出程序的时候,系统将收回分配的空间,这时就会调用析构函数;有些情况下,在程序进行过程中,使用delete 函数来销毁动态分配的对象,这时就会调用析构函数...

在c++类中,定义构造函数的目的是什么
构造函数通常用于在实例化对象时自动对内部数据成员初始化,设置初始值、分配内存空间等。而析构函数则用于删除对象时做收尾工作,比如释放申请的空间等。要创建一个对象,就得调用构造函数。要销毁一个对象,就会被迫的调用析构函数。如果成员函数声明称static,不创建对象也能调用 静态成员函数。

相似回答