前言
在对象创建的时候都会调用构造函数来初始化
构造函数一共有三种,普通构造、拷贝构造分别可以为不同种类的成员赋值,最后一种是移动构造设计运算符重载
构造函数的特征:
1、构造函数名与类名相同,且无返回值(void也不行)
2、在每一个类中都存在有默认的构造函数(系统自行提供),且在实例化对象时都会调用,只是不做任何是事情
3、构造函数会在实例化对象时自动调用,不允许显式调用
普通构造函数
普通构造函数中分为有参构造和无参构造,即带参数的构造函数,上面说到系统默认提供的就是无参构造,默认不做任何事情,如果我们自己写了构造函数,系统不再默认使用构造函数,而是调用我们自己写的构造函数,这就叫构造函数的重写
无参构造
#include<iostream>
using namespace std;
class Triangle
{
public:
Triangle()
{
cout<<"无参构造"<<endl;
a=3;
b=4;
c=5;
}
void getValue() //成员函数(打印成员变量值)
{
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
cout<<"c="<<c<<endl;
}
private:
int a;
int b;
int c;
};
int main()
{
Triangle A;
A.getValue(); //调用成员函数
}
有参构造
#include<iostream>
using namespace std;
class Triangle
{
public:
Triangle(int a, int b, int c )
{
cout << "有参构造" << endl;
this->a = a;
this->b =b;
this->c= c;
}
void getValue() //成员函数(打印成员变量值)
{
cout << "a=" << a << endl;
cout << "b=" << b << endl;
cout << "c=" << c << endl;
}
private:
int a;
int b;
int c;
};
int main()
{
Triangle A(3,4,5);//调用参数构造
A.getValue(); //调用成员函数
}
拷贝构造
不仅仅需要为对象赋给基本的数值,还要将这个对象中的所有成员或是特定的成员赋给另外一个
#include<iostream>
using namespace std;
class Triangle
{
public:
Triangle(int a,int b,int c) //有参构造
{
this->a=a;
this->b=b;
this->c=c;
cout<<"有参构造"<<endl;
}
Triangle(Triangle &obj) //拷贝构造
{
a=obj.a; //通过目标对象对每个成员变量赋值
b=obj.b;
c=obj.c;
cout<<"拷贝构造"<<endl;
}
void getValue() //成员函数
{
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
cout<<"c="<<c<<endl;
}
private:
int a;
int b;
int c;
};
int main()
{
Triangle A(3,4,5); //A调用了有参构造
Triangle B(A); //B调用了拷贝构造
B.getValue();
}