上面的解答应该是这么回事:当构造函数有形参,而全部形参都提供了默认实参的情况下,也是默认构造函数,因为此时调用此构造函数初始化类时,可以不提供实参。比如:
class A
{
private:
int a;
int b;
public:
A(int x=0,int y=0):a(x),b(y) {}
};
你下面自己的理解❶是对的,形参就是x,y。而❷不正确。因为a,b是类的数据成员。A(int x=0,int y=0):a(x),b(y) {}才包含默认实参。
virtual ~A(void); //析构函数里的virtual是什么意思???
virtual 表示 该 析构函数是虚函数,子类必须重写该方法。虚函数可以只有函数体,而没有任何实现代码。。
B(const A &a); // B的构造函数为什么这样
这个跟A的构造函数一样。。A(const A &other); // 拷贝构造函数
只是参数名不同而已。。
A m_a; // 成员对象是什么意思?
成员对象其实就是一个变量,只不过这个变量是一个结构而已,而且在声明的时候自动初始化。
class类型的变量会在声明的时候默认调用无参构造函数,所以称之为成员对象。
默认构造函数是没有参数,或者是参数有默认值的构造函数。
你的类没有定义构造函数,那么编译器将为你生成一个默认无参数构造函数,但如果你定义了一个构造函数,那么编译器将不为你自动生成默认构造函数,那么你在使用 ClassType objectname;时将没有匹配的构造函数被调用,那么你必须自己定义一个默认构造函数。
定义了2个默认构造函数了,那么就不在使用默认的构造函数,当你在创建对象时候,需要调用一个无参的构造函数。
你好!
子类从基类继承,如果子类构造时不显示调用基类的构造函数,那么系统会使用基类的默认构造函数,但是因为你没有提供默认的构造函数,所以报错了!
你可以在构造函数的参数列表中再加入基类的构造函数调用,或者给基类提供一个默认的构造函数。
打字不易,采纳哦!
回答:
1,
如果没有定义构造函数,系统自动给默认构造函数
如果定义了构造函数,行A就是默认构造函数的形式
2,
如果定义了任何构造函数,2着必须显示的定义在类中
(构造具体执行内容可以放到其他地方,不过要用::来说明属于谁)
3,
为类定义了构造函数后,程序员就必须为它提供默认构造函数--非常正确
下面的例子行BCD都是定义的构造函数,参数可变重载了构造函数
行A就是默认构造函数,行BCD可以任意删除,A行却不行
行BCD全部删除后,A行可以删除
只要有BCD任意一行在,A行就不能删除
#include<iostreamh>
#include<stdlibh>
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;
}
呵呵,这个问题很有意思,我看Primer的时候也有过相同的疑问。
首先,构造函数是支持重载的,但是构造函数的特征是函数名与类名相同,所以构造函数的区别就在于参数的不同。
另外还有一点就是,如果一个类没有给他写构造函数,那么编译器会给他添上一个
比如举例,一个Person类。
默认构造函数构造对象的时候要运行的构造函数,就是没有参数或者参数有默认值的那个构造函数,每个类都应该有一个这样的函数。
class
Person
{
string
name;
public:
Person(string
str
=
"no");
//带默认参数的构造函数
}
为什么一定要有一个默认构造函数呢?
因为你建立一个新对象的时候就要运行这个函数来构造此对象,当然也可以为带一个参数的。
比如:
class
Person
{
string
name;
public:
Person(string
str);
}
对这个对象,在构造的时候只要加上一个初始值就行了,比如
Person
John("John");
但是如果是数组呢,如Person
student[10]呢,由于没有默认构造函数所以这段代码肯定会出错。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)