构造函数的使用

1. 构造函数

构造函数的作用是用于构造(创建)对象,是一种特殊的函数,如果用户没有显示的写出构造函数,那么编译器会自动生成一个隐式的不带参的构造函数;如果用户显示的写出构造函数,那么编译器不会自动生成隐式的构造函数。创建对象时会自动调用构造函数(才表示对象创建成功)

构造函数的调用方式:

(1)实例化对象的方式调用----构造函数的隐式调用

(2)直接通过类方式调用-----构造函数的显示调用

格式:

类名([实参列表]);

例如:

People(10);//构造函数的显示调用

构造函数的格式:
	类名 (参数列表)
	{
		//代码
	}
例如:
	People()
	{
		//代码
	}

注:

创建对象时,要参考构造函数是否带参,如果带参那么创建对象时就需要传递实参

格式:
		类名  对象名(实参列表);
	例如:
		People  people(10);

2. 默认无参构造函数(隐式)

2.1 不带默认初始值

mian2.cpp

class MyClass {
public:

    //构造函数
    MyClass(){
        cout << "我是无参构造函数" << endl;
    }

    //构造函数,无参构造还可一在内部给变量赋值   //调用obj.display();//80    5.66
    /*MyClass() {
        integerVar = 80;
        floatVar = 5.66;
        cout << "我是无参构造函数" << endl;
    }*/

    // 成员函数用于显示成员变量的值
    void display() {
        cout << "Integer variable: " << integerVar << endl;
        cout << "Float variable: " << floatVar << endl;
    }

public:
    int integerVar;
    float floatVar;
};

int main() {
    // 创建对象时默认构造函数被调用,成员变量被赋予指定的值
    MyClass obj;

    obj.display();//随机值
    cout << endl;

    obj.integerVar = 20;
    obj.floatVar = 3.56;
    obj.display();//20    3.56

    return 0;
}

构造函数的使用_第1张图片

2.2  重写默认无参构造函数,带默认初始值

mian2.cpp

#include 
#include"Test.h"
using namespace std;


//构造函数
//情况2 :重写默认无参构造函数,且带默认初始值
class MyClass {
public:
    // 默认构造函数,在成员初始化列表中给成员变量赋值
    //这里默认的构造函数,我们这里重写了,所以这个构造函数带的默认值,就会被赋值给相应的属性
    // 但是如果主函数中通过对象给属性赋值,这个里的默认属性的值就会被覆盖
    MyClass() : integerVar(42), floatVar(3.14) {
        cout << "我是无参构造函数" << endl;
    }

    /*MyClass(){
        cout << "我是无参构造函数" << endl;
    }*/

    // 成员函数用于显示成员变量的值
    void display() {
        cout << "Integer variable: " << integerVar << endl;
        cout << "Float variable: " << floatVar << endl;
    }

public:
    int integerVar;
    float floatVar;
};

int main() {
    // 创建对象时默认构造函数被调用,成员变量被赋予指定的值
    MyClass obj;

    obj.display();//42      3.14
    cout << endl;

    obj.integerVar = 20;
    obj.floatVar = 3.56;
    obj.display();//20    3.56

    return 0;
}

构造函数的使用_第2张图片

3. 有参构造函数

mian2.cpp

//构造函数
//情况3 :有参构造函数
class MyClass {
public:
   
    MyClass(int x,float y){
        integerVar = x;
        floatVar = y;
        cout << "我是有参构造函数" << endl;
    }


    // 成员函数用于显示成员变量的值
    void display() {
        cout << "Integer variable: " << integerVar << endl;
        cout << "Float variable: " << floatVar << endl;
    }

public:
    int integerVar;
    float floatVar;
};

int main() {
    // 创建对象时默认构造函数被调用,成员变量被赋予指定的值
    MyClass obj(40,8.99);
    obj.display();//40    8.99
    cout << endl;

    obj.integerVar = 20;
    obj.floatVar = 3.56;
    obj.display();//20    3.56

    return 0;
}

构造函数的使用_第3张图片

4. 总结:

(1)构造函数可以发生重载

(2)构造函数没有返回值

(3)构造函数的作用是用于构造对象,还可以初始化类的成员变量

5. 练习

5.1 练习1

用户自行构建一个立方体的类Test, 通过该类能够计算并输出立方体的表面积和体积。题目要求如下:

a、成员变量Line表示立方体的边长

b、方法setValue (double value)设置立方体的边长、方法getVolume ()得到立方体的体积、方法gcetArea () 得到立方体的表面积

c、方法display () ,输出计算的结果(体积和表面积都要输出)

Test.h

#pragma once
#include "iostream"
using namespace std;

class Test
{
public:
	double line;

	//方法setValue (double value)设置立方体的边长、方法getVolume ()得到立方体的体积、方法gcetArea () 得到立方体的表面积

	void setValue(double value);

	double getVolume();

	double gcetArea();

	void display();

};


Test.cpp

#include "Test.h"


//设置立方体的边长
void Test::setValue(double value) {
	line = value;
}

//得到体积
double Test::getVolume() {
	return line * line * 6;
}

//得到表面积
double Test::gcetArea() {
	return line * line * line;
}

//显示数据
void Test::display() {
	cout << "表面积:" << gcetArea() << endl;
	cout << "体积:" << getVolume() << endl;
}

主函数main1.cpp

#include 
#include"Test.h"
using namespace std;

//练习
//用户自行构建一个立方体的类Test, 通过该类能够计算并输出立方体的表面积和体积。题目要求如下:
//a、成员变量Line表示立方体的边长
//b、方法setValue(double value)设置立方体的边长、方法getVolume()得到立方体的体积、方法gcetArea() 得到立方体的表面积
//c、方法display(), 输出计算的结果(体积和表面积都要输出)
int main()
{
	//实例化一个对象
	Test test;
	test.setValue(6.0);
	test.display();

	return 0;
}

6.2 练习2

构造函数的使用_第4张图片

main3.cpp

#include "iostream"
using namespace std;


//小游戏
//武器类
class Weapon
{
public:
	//预先约定:刀1  箭2  弓弩3  枪4 大炮5
	void dao() {
		cout << "用户装备了武器:刀" << endl;
	}
	void jian() {
		cout << "用户装备了武器:箭" << endl;
	}
	void gongnu() {
		cout << "用户装备了武器:弓弩" << endl;
	}
	void qiang() {
		cout << "用户装备了武器:枪" << endl;
	}
	void dapao() {
		cout << "用户装备了武器:大炮" << endl;
	}


};

//药品类
class Hospital
{
public:
	//约定:  绷带1   饮料2   止痛药3  急救包4   医疗箱5
	void bengdai() {
		cout << "用户装备了药品:绷带" << endl;
	}
	void yinliao() {
		cout << "用户装备了药品:饮料" << endl;
	}
	void zhitongyao() {
		cout << "用户装备了药品:止痛药" << endl;
	}
	void jijiubao() {
		cout << "用户装备了药品:急救包" << endl;
	}
	void yiliaoxiang() {
		cout << "用户装备了药品:医疗箱" << endl;
	}

};

//认为角色
class People
{
public:
	People() :blood(100) {
		cout << "人物角色创建成功,血量100" << endl;
	}

	void stack(Weapon &weapon,People &people, int flag) {//攻击,装备武器+攻击对象

		switch (flag) {
		case 1:
			weapon.dao();
			cout << "使用刀进行攻击:伤害-5" << endl;
			people.blood = people.blood - 5;
			break;
		case 2:
			weapon.jian();
			cout << "使用箭进行攻击:伤害-10" << endl;
			people.blood = people.blood - 10;
			break;
		case 3:
			weapon.gongnu();
			cout << "使用弓弩进行攻击:伤害-10" << endl;
			people.blood = people.blood - 10;
			break;
		case 4:
			weapon.qiang();
			cout << "使用手枪进行攻击:伤害-50" << endl;
			people.blood = people.blood - 50;
			break;
		case 5:
			weapon.dapao();
			cout << "使用大炮进行攻击:伤害-80" << endl;
			people.blood = people.blood - 80;
			break;
		default:
			break;


		}

	}

	void get_blood(Hospital &hospital,int flag) {//回血

		if (blood==100) {
			cout << "角色血量已满,回血失败"<

构造函数的使用_第5张图片

6.3 练习3

构造函数的使用_第6张图片

main4.cpp

#include "iostream"
using namespace std;

//Test类
//根据结果推出类
class Test {
public:

	int a;
	int b;

	void Init(int x,int y) {
		a = x;
		b = y;
	}
	void Print() {
		cout<构造函数的使用_第7张图片

你可能感兴趣的:(C++,c++,c语言,linux,算法)