求解 C++中构造函数与默认构造函数的关系

1.默认构造函数的形式是什么样的2.二者是否都必须显式的定义在类中3.C++primer这本书中说的:为类定义了构造函数后,程序员就必须为它提供默认构造函数怎么理解??请... 1.默认构造函数的形式是什么样的
2.二者是否都必须显式的定义在类中
3.C++primer这本书中说的:为类定义了构造函数后,程序员就必须为它提供默认构造函数怎么理解??请举例说明~

新手学习 望多多指教
4.能不能只定义构造函数 而不定义默认构造函数 也请举例说明
展开
 我来答
lovemezhoupeng
2010-11-09 · TA获得超过1187个赞
知道小有建树答主
回答量:269
采纳率:0%
帮助的人:0
展开全部
回答:
1,
如果没有定义构造函数,系统自动给默认构造函数
如果定义了构造函数,行A就是默认构造函数的形式

2,
如果定义了任何构造函数,2着必须显示的定义在类中
(构造具体执行内容可以放到其他地方,不过要用::来说明属于谁)

3,
为类定义了构造函数后,程序员就必须为它提供默认构造函数--非常正确
下面的例子行BCD都是定义的构造函数,参数可变重载了构造函数
行A就是默认构造函数,行BCD可以任意删除,A行却不行
行BCD全部删除后,A行可以删除
只要有BCD任意一行在,A行就不能删除

#include<iostream.h>
#include<stdlib.h>

class temp
{
private:
int x,y,z;
public:
temp (); //默认构造函数 行A
temp (int); //用户定义构造函数 行B
temp (int,int); //用户定义构造函数 行C
temp (int,int,int); //用户定义构造函数 行D
};

void main()
{
temp td(1,2,3);
temp tc(1,2);
temp tb(1);
temp ta;
}

temp::temp ( )
{
cout<<"默认参数的构造函数"<<endl;
}

temp::temp (int a)
{
cout<<"一个参数的构造函数"<<endl;
x=a;
}

temp::temp (int a, int b)
{
cout<<"二个参数的构造函数"<<endl;
x=a;
y=b;
}

temp::temp (int a, int b, int c)
{
cout<<"三个参数的构造函数"<<endl;
x=a;
y=b;
z=c;
}
fanchangyong08
2010-11-09 · TA获得超过660个赞
知道小有建树答主
回答量:1096
采纳率:0%
帮助的人:0
展开全部
1.默认构造函数的形式是什么样的
类名(){函数体}
2.二者是否都必须显式的定义在类中
不需要,如果程序没有显示定义任何构造函数,编译器会提供一个默认的.
3.C++primer这本书中说的:为类定义了构造函数后,程序员就必须为它提供默认构造函数怎么理解??请举例说明~
我觉得不是必须的啊.如果不定义默认的构造函数,就不能这样创建对象了:A a; std::vector<A> a; A a[5];,这些操作都会调用默认的构造函数,但是你没给提供啊.

4.能不能只定义构造函数 而不定义默认构造函数

完全可以,你这个问题和第三个是一个问题.

你只需要记住,当你自己没定义任何构造函数的时候,编译器会给你一个.如果你自己定义了任何一个构造函数,便宜器不会提供.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sunmanpower
推荐于2016-05-25 · TA获得超过1158个赞
知道小有建树答主
回答量:353
采纳率:0%
帮助的人:257万
展开全部
class animal
{
private:
char *name;
animal()//默认构造函数
{
}
animal(char* newname)//自定义的构造函数
{
name = newname;
}
}

2、不需要都显式在定义的类中
3、我试了下,并不需要因为自定义构造函数而显式提供默认构造函数,因为构造函数是在你声明一个类时,C++默认提供给你的。

4、可以只定义够着函数而不定义默认构造函数。
#include <iostream>
using namespace std;

class Animal
{
private:
char* name;
public:
//Animal()
//{
// name = "Unknown";
//}

Animal(char *temp)
{
name = temp;
}
void showName()
{
cout<<name<<endl;
}
};

void main()
{
//Animal anAnimal;
Animal myAnimal("hello");
//anAnimal.showName();
myAnimal.showName();
}
你看看这个例子,自己试试理解下!
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
314911015
2010-11-09
知道答主
回答量:12
采纳率:0%
帮助的人:0
展开全部
class Clock
{
public:
Clock(int newH,int newM,int newS);//构造函数
};
如果类中没有写构造函数的话,编译器就会自动生成一个默认形式的构造函数--不含参数,也不做任何事情。所以如果类中声明了构造函数(无论是否有参数),编译器就不再生成任何形式的构造函数。

class Clock
{public:
Clock(int newH,int newM,int newS);//构造函数
Clock() //构造函数
{Hour = 0; Minute = 0; Second = 0;}

int main()
{Clock c1 (0,0,0);//调用有参数的构造函数
Clock c2;//调用无参数的构造函数
}

这里的构造函数有两种形式:有参数的和无参数的。无参数的构造函数也称为默认形式的构造函数。
所以构造函数无需显示的定义在类中;有了构造函数也不一定要提供默认构造函数,只有构造函数就可以或者让编译器自动生成默认形式的构造函数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
address2
2010-11-09 · TA获得超过202个赞
知道答主
回答量:414
采纳率:0%
帮助的人:206万
展开全部
默认构造函数是没有参数的构造函数,如果没有构造函数,就不必定义默认构造函数。编译器会自动生成一个。如果你定义了构造函数,就不会自动生成了。
可以只定义构造函数,但是没法用这个类生成对象数组。例如A a[5];如果A没有默认构造函数就会失败。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式