c++构造函数总结

c++构造函数总结

构造函数是类中,特殊的成员函数,用于初始化数据成员,其定义的语法如下:

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; 
}

 运行结果为:

c++构造函数总结

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;
}

 运行结果为:

c++构造函数总结

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;
}

运行结果为:
c++构造函数总结

 对于带默认的参数值的构造函数的定义及使用有两个注意事项:

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;
}

 运行结果为:

c++构造函数总结

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/114817.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号