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++构造函数总结

 

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • WinRAR去广告:只需六步,教你去除WinRAR的广告[通俗易懂]

    WinRAR去广告:只需六步,教你去除WinRAR的广告[通俗易懂]最简单的WinRAR去广告步骤1.下载ResourceHacker地址:ResourceHacker下载地址2.用软件打开WinRAR.exe3.打开StringTable4.打开80:20525.删除1277所在整行,点击运行,然后另存为6.将另存为的WinRAR替换掉原来的将新生成的exe文件仍然命名为WinRAR.exe(我把原来的winrar改名为WinRAR_backup.exe作为备份了)7.大功告成,广告去除了…

    2022年4月27日
    47
  • visual studio code使用教程_visual studio code 权威指南 pdf

    visual studio code使用教程_visual studio code 权威指南 pdfsnippet,也即代码片,指的是能够帮助输入重复代码模式,比如循环或条件语句,的模板。本文即旨于详实地介绍如何在vscode中设置snippet。

    2022年8月21日
    9
  • Arthas – Java 线上问题定位处理的终极利器「建议收藏」

    Arthas – Java 线上问题定位处理的终极利器「建议收藏」前言在使用Arthas之前,当遇到Java线上问题时,如CPU飙升、负载突高、内存溢出等问题,你需要查命令,查网络,然后jps、jstack、jmap、jhat、jstat、hprof等一通操作。最终焦头烂额,还不一定能查出问题所在。而现在,大多数的常见问题你都可以使用Arthas轻松定位,迅速解决,及时止损,准时下班。1、Arthas介绍Arthas是Alib…

    2022年10月22日
    0
  • 台式机网线连接笔记本通过wifi上网

    台式机网线连接笔记本通过wifi上网台式机网线连接笔记本通过wifi上网完整方案有时台式机会突然断网,网线没问题,笔记本没问题,问题出在台式机的ip上。完整方案1、网线两端连接笔记本和台式机。以前需要用交叉网线,但是现在的网线好像不作区分了,都能用。2、笔记本端WiFi连接网络3、wlan网络属性勾选网络共享,如果有多个网络,框里选择以太网。4、笔记本的以太网属性中,记下ip地址和子网掩码5、在台式机的以太网属性中,默认网关设置与上面的ip地址相同,因为子网掩码前三位都是255,所以台式机的ip地址前三位与网关相同,后一位好

    2022年6月26日
    23
  • 电脑弹出当前页面的脚本发生错误_360当前页面的脚本发生错误

    电脑弹出当前页面的脚本发生错误_360当前页面的脚本发生错误笔者Windows版本:Windows8Enterprise64位(DirectX11)Windows有一天忽然开始报“脚本错误当前页面的脚本发生错误”警告窗口:不管点“是”还是“否”,电脑使用一段时间以后还是会弹这个烦人的框。按照搜索来的解决办法,禁用IE的脚本调试选项:不起作用,还是会持续报以上警报。即便是重启电脑以后依然会如此。这…

    2022年10月21日
    0
  • 一窥直播技术新趋势「建议收藏」

    一窥直播技术新趋势「建议收藏」历经2016直播元年的爆发,直播App的虚火逐步降温,行业逐渐恢复理性,并不断探索新的产品形态与创新。这其中,技术扮演了不可或缺的角色,新的编码与传输协议,覆盖全球的网络架构,低延迟的音频传输与白板,基于深度学习的图像识别等,这一切进一步加强了各直播参与方的互动。基于Html5的直播技术,AR/VR,H.265编码普及,高清直播成本进一步降低,人工智能等技术又将让直播充满了更多想象。

    2022年7月21日
    10

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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