构造函数是类中,特殊的成员函数,用于初始化数据成员,其定义的语法如下:
class 类名{
public:
构造函数名称(参数表)
{
函数体
}
private:
数据成员;
};
构造函数定义的语法规定为:
构造函数名与类名相同;
构造函数名前没有返回值类型声明。
构造函数中不能通过return语句返回一个值。
通常构造函数具有public属性。
1、系统提供的默认构造函数
#include<iostream>
using namespace std;
class car{
//成员函数
public:
void Disp_val();
private:
int lunzi;
int zuowei;
int length;
};
void car::Disp_val()
{
cout << "luozi " << lunzi << endl;
cout << "zuowei " << zuowei << endl;
cout << "length " << length << endl;
}
int main(){
car mycar;
mycar.Disp_val();
system("pause");
return 0;
}
运行结果为:
2,自定义无参构造函数:
#include<iostream>
using namespace std;
class Car{
public:
Car(){
cout << "car constucf!" <<endl;
m_strcarname = "xucheng";
}
string getname(){
return m_strcarname;
}
private:
string m_strcarname;
};
int main(){
Car mycar;
cout << "car naem!" << mycar.getname()<<endl;
system("pause");
return 0;
}
运行结果为:
3,自定义带参数的构造
通常我们希望能在对象创建时为数据成员提供有效值。同时定义多个构造函数就可以实现构造函数的重载
例子:
#include<iostream>
using namespace std;
class Car{
public:
Car(string con_carname, int con_seats){
cout << "Calling Car constructor, set carname , seat!" << endl;
m_strCarname = con_carname;
m_seats = con_seats;
}
Car(string con_carname){
cout << "please cin your carname" << endl;
m_strCarname = con_carname;
}
void disp();
private:
string m_strCarname;
int m_seats;
};
void Car::disp(){
cout << "carname " << m_strCarname <<","
<< " Seats = "<<m_seats<<endl;
}
int main(){
Car mycar("my car is lanbojini", 8);
Car yourcar("nihao");
mycar.disp();
yourcar.disp();
system("pause");
return 0;
}
对于带参数的构造函数,除了上面介绍的外还可以,通过下面两种方式对数据进行赋值
1,通过初始化表,来实现数据成员的初始化
2,默认参数值的构造函数
上例子吧,看看格式,懒得打
#include<iostream>
using namespace std;
class Car{
public:
//通过初始化表对数据成员进行初始化
Car(string con_carname,int con_seats) : m_carname(con_carname),m_seats(con_seats){
cout<<"calling Car constructor , set carname and seats!"<<endl;
}
//定义带有默认参数值的构造参数
Car(string con_carname = "我的新车"){
cout <<"calling Car constructor , set carname and seats!" <<endl;
m_carname = con_carname;
m_seats = 4;
}
void dispxianshi(){
cout << "汽车的名字为: "<<m_carname<<";"
<<"汽车的座位是: " << m_seats << endl;
}
private:
string m_carname;
int m_seats;
};
int main(){
Car mycar;
Car youcar("兰博基尼",4);
mycar.dispxianshi();
youcar.dispxianshi();
system("pause");
return 0;
}
运行结果为:
对于带默认的参数值的构造函数的定义及使用有两个注意事项:
1,对于带默认参数值的构造函数来说,需要防止调用的二义性。
2,构造函数中若第n个参数有默认值,则其后的所有参数,都应该有默认值,若构造函数定义为如下内容,则编译出错
car(string con_carname = “my car “, int con_seats );
脚下留心!:
类中定义构造函数后,编译器不再提供默认构造函数,(java中也一样)
还有一个小知识点,就是包含对象成员的类的构造函数;
这个理解起来不难,下面见一个例子吧
#include<iostream>
#include<string>
using namespace std;
class Student
{
public:
string name;
string number;
char X;
int year;
Student(string,string,char,int); //构造函数声明
void xianshi(void); //用于输出类成员的值
};
//成员函数定义,包括构造函数
Student::Student(string N,string n,char x,int y) //利用构造函数给类的成员赋值
{
name = N;
number = n;
X = x;
year = y;
}
void Student::xianshi() //输出成员的值
{
cout<<name<<endl;
cout<<number<<endl;
cout<<X<<endl;
cout<<year<<endl;
}
int main() //主函数
{
cout<<"输入姓名:";
string N;
cin>>N;
cout<<"输入学号:";
string n;
cin>>n;
cout<<"输入性别(M 或 W):";
char x;
cin>>x;
cout<<"输入年龄:";
int y;
cin>>y;
Student S(N,n,x,y); //定义对象并对构造函数赋值
S.xianshi(); //引用输出函数
return 0;
}
运行结果为:
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/114817.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...