欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > 十一(2) 类的实例化

十一(2) 类的实例化

2025/11/8 18:43:00 来源:https://blog.csdn.net/wydaicls/article/details/148517845  浏览:    关键词:十一(2) 类的实例化

1.构造函数

函数名必须与类名相同,且没有返回值类型

构造函数调用时机

在定义对象同时自动被调用,且仅被调用一次

Human h;    // 创建类的这个时候就会调用构造方法
  • 对象定义语句
/*构造函数
*/
Human(int age, const char* name);Human::Human(int age,const char* name)
{cout << "Human 构造函数被调用..." << endl;this->age = age;strcpy_s(this->name, name);
}void getInfo(){cout << "age = " << this->age << " name = " << this->name << endl;};int main()
{Human h(20,"wyd");// h.setInfo(20, "wyd");h.getInfo();   // age = 20 name = wyd
}
  • new 操作符
构造函数重载
  • 构造函数可以重载

    • 构造函数也可以通过参数表差别化形成重载

    • 重载的构造函数,通过构造函数的实参类型进行匹配

    • 不同的构造函数,表示对象的不同创建方式

class HO
{
public:HO();~HO();HO(int age){this->age = age;this->name = "";cout << "HO(int age)" << endl;}HO(int age, const char* name){this->age = age;this->name = name;cout << "HO(int age,const char* name)" << endl;}void getInfo(){cout << "age = " << age << " name = " << name << endl;}private:int age;string name;
};HO::HO()
{cout << "HO() ~ " << endl;this->age = 0;this->name = "";
}HO::~HO()
{
}int main()
{HO hq1;   // 调用无参的构造方法hq1.getInfo();HO hq2(20);  // 调用一个参数的构造方法hq2.getInfo();HO hq3(25,"cls");  // 调用两个参数的构造方法hq3.getInfo();
}输出内容:HO() ~
age = 0 name =HO(int age)
age = 20 name =HO(int age,const char* name)
age = 25 name = cls
    • 使用缺省参数可以减少构造函数重载的数量

  • 构造函数分类

    • 多参数构造函数:按多参方式构造

    • 无参(缺省)构造函数:按无参方式

    • 类型转换构造函数:利用不同类型的对象构造

    • 拷贝构造函数:利用相同类型的对象构造

构造函数的作用
  • 定义对象的各个成员变量并赋初始值。设置对象的初始状态

  • 在对象定义之初想实现的任何操作

对象的创建过程
  • 为整个对象创建内存空间

  • 以构造实参调用构造函数

    • 定义成员变量

    • 执行构造代码

2. 类的声明和实现

类的声明实现可以分开实现

class 类名{

返回类型 函数名 (形参表); // 声明

}

返回类型 函数名::函数名 (形参表) //实现

{

函数体;

}

将类的声明,实现与实现分别放在不同的文件中

//Human.h文件  -- 声明

class Human{
    
    
public:
    
    Human();
    void getInfo();
    
private:
    int age;
}

----------------------------------------

// Human.cpp --  实现
    
#include "Human.h"
    
Human:Human()
{
    
}

void Human::getInfo()
{
    
}


--------------------------------------
    
// Main.cpp
    
#include "Human.h"
    
 int main()
{
    
    Human h;
    
    h.getInfo();
    
}
    

3. 定义对象的几种方法

对象的定义与销毁
1.在栈中定义单个对象
  • 类名 对象;

Human h1;
  • 类名 对象(实参表);

Human h2(20,"wyd");
2.在栈中定义对象数组
  • 类名 对象数组[元素个数];
Human h3[3];   // 定义3个Human对象for(int i = 0; i < 3; i++)
{h3[i].getInfo();
}
  • 类名 对象数组[元素个数] = {类名(实参表)...};
Human h4[3] = {Human(20,"wyd"),Human(20,"wyd"),Human(20,"wyd")
};
  • 类名 对象数组[] = {类名(实参表)...};
Human h5[] = {Human(20,"wyd"),Human(20,"wyd"),Human(20,"wyd")
};
3.在堆中定义/销毁单个对象(new出来的对象声明周期不短暂)
  • 类名* 对象指针 = new 类名;

  • 类名* 对象指针 = new 类名();

  • 类名* 对象指针 = new 类名(实参表);

  • delete 对象指针;

4.在堆中定义/销毁对象数组
  • 类名* 对象数组指针 = new 类名[元素个数];

  • 类名* 对象数组指针 = new 类名[元素个数]{ 类名(实参列表)...};

  • delete[] 对象指针数组;

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词