求解 C++中构造函数与默认构造函数的关系
1.默认构造函数的形式是什么样的2.二者是否都必须显式的定义在类中3.C++primer这本书中说的:为类定义了构造函数后,程序员就必须为它提供默认构造函数怎么理解??请...
1.默认构造函数的形式是什么样的
2.二者是否都必须显式的定义在类中
3.C++primer这本书中说的:为类定义了构造函数后,程序员就必须为它提供默认构造函数怎么理解??请举例说明~
新手学习 望多多指教
4.能不能只定义构造函数 而不定义默认构造函数 也请举例说明 展开
2.二者是否都必须显式的定义在类中
3.C++primer这本书中说的:为类定义了构造函数后,程序员就必须为它提供默认构造函数怎么理解??请举例说明~
新手学习 望多多指教
4.能不能只定义构造函数 而不定义默认构造函数 也请举例说明 展开
8个回答
展开全部
回答:
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;
}
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;
}
展开全部
1.默认构造函数的形式是什么样的
类名(){函数体}
2.二者是否都必须显式的定义在类中
不需要,如果程序没有显示定义任何构造函数,编译器会提供一个默认的.
3.C++primer这本书中说的:为类定义了构造函数后,程序员就必须为它提供默认构造函数怎么理解??请举例说明~
我觉得不是必须的啊.如果不定义默认的构造函数,就不能这样创建对象了:A a; std::vector<A> a; A a[5];,这些操作都会调用默认的构造函数,但是你没给提供啊.
4.能不能只定义构造函数 而不定义默认构造函数
完全可以,你这个问题和第三个是一个问题.
你只需要记住,当你自己没定义任何构造函数的时候,编译器会给你一个.如果你自己定义了任何一个构造函数,便宜器不会提供.
类名(){函数体}
2.二者是否都必须显式的定义在类中
不需要,如果程序没有显示定义任何构造函数,编译器会提供一个默认的.
3.C++primer这本书中说的:为类定义了构造函数后,程序员就必须为它提供默认构造函数怎么理解??请举例说明~
我觉得不是必须的啊.如果不定义默认的构造函数,就不能这样创建对象了:A a; std::vector<A> a; A a[5];,这些操作都会调用默认的构造函数,但是你没给提供啊.
4.能不能只定义构造函数 而不定义默认构造函数
完全可以,你这个问题和第三个是一个问题.
你只需要记住,当你自己没定义任何构造函数的时候,编译器会给你一个.如果你自己定义了任何一个构造函数,便宜器不会提供.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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();
}
你看看这个例子,自己试试理解下!
{
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();
}
你看看这个例子,自己试试理解下!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;//调用无参数的构造函数
}
这里的构造函数有两种形式:有参数的和无参数的。无参数的构造函数也称为默认形式的构造函数。
所以构造函数无需显示的定义在类中;有了构造函数也不一定要提供默认构造函数,只有构造函数就可以或者让编译器自动生成默认形式的构造函数
{
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;//调用无参数的构造函数
}
这里的构造函数有两种形式:有参数的和无参数的。无参数的构造函数也称为默认形式的构造函数。
所以构造函数无需显示的定义在类中;有了构造函数也不一定要提供默认构造函数,只有构造函数就可以或者让编译器自动生成默认形式的构造函数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
默认构造函数是没有参数的构造函数,如果没有构造函数,就不必定义默认构造函数。编译器会自动生成一个。如果你定义了构造函数,就不会自动生成了。
可以只定义构造函数,但是没法用这个类生成对象数组。例如A a[5];如果A没有默认构造函数就会失败。
可以只定义构造函数,但是没法用这个类生成对象数组。例如A a[5];如果A没有默认构造函数就会失败。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |