类对象的初始化
序:
程序在使用时是常常需要对变量进行初始化赋值。与c语言不同,在面向对象的编程中,使用构造函数对数据成员进行初始化,有多种方式。
录:
一、无参数的构造函数
二、带参数的构造函数
三、使用构造函数的参数初始化表
四、带默认参数的构造函数
对各种方式的描述均以举例子的方式来解释:
eg: 定义一个描述学生通讯录的类,数据成员包括:姓名、学校、电话号码.成员函数包括构造函数.设置各个数据成员的值和输出各个数据成员的值
对于类的定义(统一):
class Cstudent
{
public:
void set_data(); //建立学生数据
void show_data(); //输出学生数据
private:
string name;
string school;
int tele;
};
一、无参数的构造函数
#include <iostream>
#include <string>
using namespace std;
class Cstudent
{
public:
Cstudent() //构造函数名要与类名相同
{
name = "zhangsan";
school = "yizhong";
tele = 12345;
} //在构造函数中直接对成员初始化
void set_data();
void show_data();
private:
string name;
string school;
int tele;
};
void Cstudent::set_data()
{
cin >> name;
cin >> school;
cin >> tele;
return;
}
void Cstudent::show_data()
{
cout <<""<< name <<" "<< school<< " " << tele << endl;
return;
}
int main()
{
Cstudent C1;
C1.set_data();
C1.show_data();
//对学生数据进行修改,输出为set_data函数输入的值
Cstudent C2;
C2.show_data();
//C2对象没有调用set_data函数对成员修改,直接输出初始化中的初始值。
return 0;
}
二、带参数的构造函数
区别于第一种类的定义,加入构造函数Cstudent
class Cstudent
{
public:
Cstudent(string, string, int); //类名 (类型1,类型2,类型3)
//类型与初始化数据类型一致
void set_data();
void show_data();
private:
string name;
string school;
int tele;
};
在类外需要对其定义
Cstudent::Cstudent(string string1, string string2, int t)
{
name = string1;
school = string2;
tele = t;
}
在主函数对象定义时为
类名 对象名(实参1,实参2,实参3);
int main()
{
Cstudent C1("wanger","yizhong",2341); //对其进行初始化数据
C1.show_data();
Cstudent C2("Lisi", "yizhong", 12311);
C2.show_data();
return 0;
}
带参数较无参数的对类、类外函数、main函数添加修改
即毕
三、带默认参数的构造函数
类的定义:
class Cstudent
{
public:
Cstudent(string a = "zhangsan",
string b = "yihzong",
int c = 12414);
void set_data();
void show_data();
private:
string name;
string school;
int tele;
};
类外定义:
Cstudent::Cstudent(string a, string b, int c)
{
name = a;
school = b;
tele = c;
}
main函数中常规定义对象:
Cstudent s1;
与带参数比较:
在构造函数中直接对参数进行初始化而后在类外进行参数与数据成员的链接。 两者差别不大,着重理解`参数与数据成员的初始化
四、带参数初始化表
类中定义
构造函数结构
类名(类型1 形参1…):成员1(类型1…){}
class Cstudent
{
public:
Cstudent(string string1,string string2,int t):name(string1), school(string2), tele(t){}
void set_data();
void show_data();
private:
string name;
string school;
int tele;
};
注意: 若形参为数组,组需要在函数体{}中使用strcpy函数对其赋值
eg;
Cstudent(string dtring1,char s[10]):name(string1) //构造函数
{strcpy(school,s)} //函数体
main函数中
int main()
{
Cstudent C1("wanger", "yizhong", 2341);
C1.show_data();
Cstudent C2("Lisi", "yizhong", 12311);
C2.show_data();
return 0;
}
定义对象时直接进行初始化
学习c++时的对类数据成员的理解,若有不足或者错误,望各位大佬指出来,一起学习。谢谢!