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


相关推荐

  • webstorm 2022激活码_在线激活

    (webstorm 2022激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月31日
    890
  • UE4地编基础-材质蓝图篇[通俗易懂]

    UE4地编基础-材质蓝图篇[通俗易懂]一、贴图规格颜色贴图:颜色贴图必须是8位数RGB颜色。如果在UE4里,发现颜色贴图泛白,那么明颜色贴图是16位数的。改成8位数就正常了。灰度贴图:包括AO、Metallic(金属度)、Roughness(粗糙度)贴图。法线贴图:UE4支持Directx的法线贴图。二、贴图效果调节(蓝图)法线贴图强度调节:AO贴图强度调节:三、各种材质制作1、玻璃材质2、自发光材质……

    2022年9月27日
    2
  • Java 中的 int 型转为 long 型

    Java 中的 int 型转为 long 型先将int 型转为String 型,然后再将String 转为long 型,如下图: publicclassTestIntToLong{publicstaticvoidmain(String[]args){intnum=18;Stringstr=String.valueOf(num…

    2022年5月13日
    43
  • 花指令_cmp指令

    花指令_cmp指令本文作者:sodme本文出处:http://blog.csdn.net/sodme声明:本文能够不经作者允许随意转载、复制、引用。但不论什么对本文的引用,均须注明本文的作者、出处以及本行声明信息。可能

    2022年8月2日
    6
  • QT中this指针

    QT中this指针一:this指针只能在一个类的成员函数中调用,它表示当前对象的地址。下面是一个例子: void Date::setMonth( int mn) { month=mn; // 这三句是等价的 this->month=mn; (*this).month=mn; }1.this只能在成员函数中使用。全局函数,静态函数都不能使用th

    2022年5月17日
    143
  • 银行家算法程序c语言,银行家算法代码c语言编写.doc

    银行家算法程序c语言,银行家算法代码c语言编写.doc#defineM100#includeintmax[M][M],allocation[M][M],need[M][M],available[M];inti,j,n,m,r;voidtestout()//算法安全性的检测{intk,flag,v=0;intwork[M],a[M];charfinish[M];r=1;for(i…

    2022年5月27日
    36

发表回复

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

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