构造函数
//构造函数,它是一种特殊的函数
//主要用来在创建对象时初始化对象,即为对象的成员变量赋初始值
//也可以将对象在创建之出需要执行的逻辑写在构造函数中
#include<iostream>
#include<string>
using namespace std;
//在创建对象的时候,用来初始化类中的数据成员
//在构造中,写上定义这个对象要做的事情
/*
*1、构造函数名字和类名相同
*2、构造函数没有返回值
*3、构造函数可以函数重载
*4、构造函数的调用,在创建一个新的对象的时候自动调用
*5、如果在类当中没有显示的给出构造函数,系统会自动给出一个缺省(隐式)的构造函数(什么都不干)
*6、如果类中提供了带参构造,那么系统就不会提供这个默认构造
*7、如果类中只有带参构造,那么就不能调用默认构造的方式初始化对象,想要用这种方式初始化
对象,那么自己提供默认构造
*/
class CStudent
{
public:
int id;
string name;
//构造函数的实现 构造函数名字和类名相同
CStudent()//无参(默认)构造
{
cout << "无参构造" << endl;
id = 1;
name = "无参构造";
}
CStudent(int x, string s)//有参(带参)构造
{
cout << "带参构造" << endl;
id = x;
name = s;
}
CStudent(int x)//有参(带参)构造
{
id = x;
name = "固定参数";
}
};
void fun(CStudent& stu)
{
cout << stu.id << endl;
}
void fun1(CStudent s)//拷贝构造
{
cout << s.id << endl << s.name << endl;
}
int main()
{
CStudent stu;
cout << stu.id << endl<<stu.name<<endl;
fun1(stu);
//CStudent stu; //无参构造
//无构造函数事,多个变量需要赋值的时候不方便
/*stu.id = 123;
stu.name = "小明";*/
//构造函数的调用,在创建一个新的对象的时候自动调用
//cout << stu.id << " " << stu.name << endl;
//CStudent stu(333,"带参构造"); //带参构造 方式一
//CStudent stu = { 333, "带参构造" }; //带参构造 方式二
//cout << stu.id << " " << stu.name << endl;
//CStudent stu(333);
//CStudent stu = { 333}; //带参构造 方式二
//cout << stu.id << " " << stu.name << endl;
//CStudent* stu = new CStudent;//相当于无参构造
/*cout << stu->id << endl << stu->name << endl;
delete stu;
stu = NULL;*/
//CStudent* stu = new CStudent(123, "带参构造");//相当于带参构造
//cout << stu->id << endl << stu->name << endl;
//delete stu;
//stu = NULL;
//CStudent* stu = new CStudent[10];//只能调用默认构造
//delete[] stu;
//stu = NULL;
return 0;
}