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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • .htaccess文件中RewriteCond详解

    .htaccess文件中RewriteCond详解Apache中RewriteCond语句对于我来说一直是个难点,多次试图去把它搞明白,都没有结构,这次我终于算大概知道它的意思了RewriteCond就像我们程序中的if语句一样,表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句,这就是RewriteCond最原始、基础的功能,为了方便理解,下面来看看几个例子。复制代码代码如下:…

    2022年5月25日
    36
  • python 生成EXE文件 并执行

    python 生成EXE文件 并执行1、电脑桌面,输入“win+R”组合键,在弹出窗口中输入“cmd”,点击确定。2、安装Pyinstaller,在cmd窗口,输入指令“pipinstallpyinstaller”进行网络安装、等待并且确认pyinstaller安装完毕3、安装完毕后,进入要生成exe文件的文件目录。使用指令“pyinstaller-Fxxx.py”生成exe文件。等待生成完毕后,回到源文件目录,在dist目录下,找到生成的exe文件,即可完成Python生成exe文件操作。用python.

    2022年6月7日
    37
  • dpdk技术详解_dpdk acl

    dpdk技术详解_dpdk acligb_uio是dpdk内部实现的将网卡映射到用户态的内核模块,它是uio模块的一个实例。igb_uio是一种pci驱动,将网卡绑定到igb_uio隔离了网卡的内核驱动,同时igb_uio完成网卡中断内核态初始化并将中断信号映射到用户态。igb_uio与uio模块密切相关,我将从uio模块着手分析igb_uio模块的工作原理。uio模块分析uio可以看做是一种字符设备驱动,在此驱动中注册了单独的file_operations函数表,uio设备可以看做是

    2025年7月29日
    2
  • 基于麦克风阵列的现有声源定位技术有_阵列原理

    基于麦克风阵列的现有声源定位技术有_阵列原理专利名称:使用麦克风阵列对声源定位的方法技术领域:本发明涉及声源的定位,更具体地讲,涉及一种使用麦克风(MIC)阵列来对声源定位的方法。背景技术:阵列信号处理已经广泛应用于通信、雷达、声纳、医学和航天航空等诸多领域。近年来,随着反恐战的开展,各国已经研制了各种探测爆炸点或枪炮射击点的位置的设备。在实际应用中,由于视觉定位往往不易实现,从而发展了一些声学定位的系统,例如,美国的回力棒系统、以…

    2022年9月22日
    3
  • 线程间通信的几种实现方式

    线程间通信的几种实现方式线程间通信的几种实现方式首先,要短信线程间通信的模型有两种:共享内存和消息传递,以下方式都是基本这两种模型来实现的。我们来基本一道面试常见的题目来分析:题目:有两个线程A、B,A线程向一个集合里面依次添加元素&amp;quot;abc&amp;quot;字符串,一共添加十次,当添加到第五次的时候,希望B线程能够收到A线程的通知,然后B线程执行相关的业务操作。方式一:使用volatile关键字基于volatile…

    2022年6月19日
    26
  • ZDH大数据采集平台-采集mysql数据到hdfs

    ZDH大数据采集平台-采集mysql数据到hdfs目录项目源码创建mysql数据源创建本地hdfs数据源配置采集任务配置调度点击执行记录查看具体日志高级使用项目源码数据采集平台管理端https://github.com/zhaoyachao/zdh_web数据采集平台服务https://github.com/zhaoyachao/zdh_serverweb端在线查看http://zycblog.cn:8081/login用户名:zyc密码:123456界面只是为了参考功能,底层的数据.

    2022年6月10日
    91

发表回复

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

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