构造函数
1.构造函数基本格式
#include <bits/stdc++.h>
using namespace std;
class dog{
private:
int x,y;
public:
dog(int a,int b)//dog 与类名相同所以为构造函数
{
x=a;
y=b;
}
};
int main()
{
//主内容
}
2.构造函数的初始赋值
第一种:类似结构体的赋值方法,*在有私有成员(private)和 保护成员(protected)是不能使用
#include <bits/stdc++.h>
using namespace std;
class dog{
public:
int x,y;
dog(int a,int b) //dog 与类名相同所以为构造函数
{
x=a;
y=b;
}
};
***dog a={1,2};------------对构造函数进行赋值***
int main()
{
//主内容
}
第二种:在main函数中进行赋值(在定义对象时电脑调用dog构造函数)
#include <bits/stdc++.h>
using namespace std;
class dog{
private:
int x,y;
public:
dog(int a,int b) //dog 与类名相同所以为构造函数
{
x=a;
y=b;
}
};
int main()
{
***dog a(1,2);----比较好用的一种***
//主内容
}
第三种:*指针变量名=new类名
#include <bits/stdc++.h>
using namespace std;
class dog{
private:
int x,y;
public:
dog(int a,int b)//dog 与类名相同所以为构造函数
{
x=a;
y=b;
}
};
int main()
{
***dog *p=new dog(1,2);***
//主内容
cout<<p->.......;
}
第四种:不带参数的构造函数
#include<bits/stdc++.h>
using namespace std;
class dog
{public:
int x,y;
dog()
{
x=0;y=0;
}
};
int main()
{
dog a;//引定义方便对后面函数的引用
}
第五种:用成员初始化列表对数据成员初始化 *注意初始化的顺序与变量声明的顺序一致(例如下面顺序是先x后y)
#include <bits/stdc++.h>
using namespace std;
class dog{
private:
int x,y;
public:
dog(int a,int b)//dog 与类名相同所以为构造函数
};
dog::dog(int a,int b):x(a),y(b)//将a赋值给x,将b赋值给y;
{
}
int main()
{
//主内容
}
3构造函数的重载
在 C++ 中,构造函数是用于创建和初始化对象的特殊成员函数。它们的名称与类名相同,并且可以重载以接受不同的参数列表。
构造函数的重载意味着您可以定义具有不同参数的多个构造函数版本。这些版本可用于在创建对象时提供不同的初始化选项。
以下是构造函数的重载示例:
c++复制代码#include <iostream>
using namespace std;
class Point {
public:
// 无参构造函数
Point() {
x = 0;
y = 0;
cout << "Default constructor called." << endl;
}
// 带参构造函数1
Point(int px, int py) {
x = px;
y = py;
cout << "Constructor called with x=" << x << " y=" << y << endl;
}
// 带参构造函数2(委托构造函数)
Point(int pxy) : Point(pxy,pxy) {
cout << "Delegating constructor called with x=" << x << " y=" << y << endl;
}
private:
int x,y;
};
int main() {
Point pt1; // 默认初始化
Point pt2(10,20); // 初始化为 (10,20)
Point pt3(30); // 初始化为 (30,30)
return 0;
}
上述代码中,我们定义了一个代表二维坐标点的 Point
类。我们可以看到,该类定义了三个不同的构造函数:一个默认构造函数,以及两个带参数的构造函数。
在 main
函数中,我们创建了三个不同版本的 Point
对象。第一个是使用默认构造函数创建的对象,将被初始化为 (0,0)。第二个是使用带参构造函数1创建的,其坐标被初始化为 (10,20)。最后一个对象也使用带参构造函数2创建,因此其坐标将被初始化为 (30,30),与输入的值相匹配。
值得注意的是,第三个构造函数使用一个委托构造函数实现了它的功能。它通过调用带有两个参数的构造函数,并向其传递同一值来完成初始化。这种使用委托构造函数的方式可以使构造函数代码变得更加清晰和简洁。
4.带默认参数的构造函数
在 C++ 中,构造函数是用于创建和初始化对象的特殊成员函数。除了重载构造函数以接受不同参数列表外,也可以通过在构造函数中使用默认参数来定义具有不同初始化选项的单个构造函数。
以下是带有默认参数的构造函数示例:
#include <iostream>
using namespace std;
class Point {
public:
// 带默认参数的构造函数
Point(int px = 0, int py = 0) {
x = px;
y = py;
cout << "Constructor called with x=" << x << " y=" << y << endl;
}
private:
int x,y;
};
int main() {
Point pt1; // 默认初始化(x=0,y=0)
Point pt2(10,20); // 初始化为 (10,20)
return 0;
}
上述代码中,我们定义了一个代表二维坐标点的 Point
类。我们可以看到,该类的构造函数使用了两个整数类型的默认参数。当对象被创建时,如果没有提供值,则会自动使用默认参数给它们分配一个初始值。
在 main()
函数中,我们使用不同的方式创建了两个 Point
对象。第一个对象是不带任何参数的,因此将使用默认参数进行初始化,并被设置为 (0,0)
。第二个对象使用了自定义的参数 (10,20)
进行初始化。
需要注意的是,C++ 允许在同一构造函数中混合使用默认参数和普通参数。如果为一个参数提供了值,则其后面的所有参数都必须有显式的值。
总结:
带默认参数的构造函数使对象的初始化变得更加灵活,因为它们允许在单个构造函数中定义多个初始化选项。当对象被创建时,如果没有提供值,则会自动使用默认参数给它们分配一个初始值。需要注意的是,C++ 允许在同一构造函数中混合使用默认参数和普通参数。
以上为小白对构造函数的理解,希望对你有所帮助。