java如何定义构造函数,choose函数如何使用
墨初 知识笔记 106阅读
构造函数语法类名(){}
需要注意的是 没有返回值和返回值为空是两码事。返回值为空指的是该函数有返回值其中返回值为void类型。而支持重载则说明在一个类中可以同时存在多个构造函数。

在代码段1中People类提供了两个构造函数其中第一个是无参构造函数第二个是有参构造函数。在test函数中创建对象时father调用的是无参构造函数而son调用的有参构造函数说明构造函数重载为对象的实例化提供了多种初始化方式而对象实例化时自动调用对应的构造函数保证了对象一定可以被初始化。
class People{public: //无参构造函数 People(){} //有参构造函数 People(int age, std::string sex, std::string name) { _age age; _sex sex; _name name; }private: int _age; std::string _sex 男; //C11新标准规定可以为数据成员提供一个类内初始值。 //创建对象时类内初始值用于初始化数据成员 stf::string _name;};void test(){ People father; //不能写成People father()否则会认为是函数的声明; People son(5, 男, );}
构造函数总是在创建对象时被调用这让构造函数成为将类成员变量 int、指针等初始化为选定值的理想场所。再看一下《C中使用关键字 private 实现数据抽象》一文中的示例程序。如果忘记调用 SetAge( ) int 变量 Human::age 将包含未知的垃圾值因为该变量未初始化请尝试将第 28 和 31 行注释掉。以下示例程序是一个更好的 Human 类版本它使用构造函数初始化变量 age

#include <iostream>#include <string>using namespace std;class Human{ private: string name; int age; public: Human() // constructor { age 1; // initialization cout << Constructed an instance of class Human << endl; } void SetName (string humansName) { name humansName; } void SetAge(int humansAge) { age humansAge; } void IntroduceSelf() { cout << I am name << and am ; cout << age << years old << endl; }};int main(){ Human firstWoman; firstWoman.SetName(Eve); firstWoman.SetAge (28); firstWoman.IntroduceSelf();}
输出
Constructed an instance of class HumanI am Eve and am 28 years old
分析
新增了指示对象创建的输出行。来看看第 3441 行的 main()
从中可知第 1 行输出是第 36 行创建对象 firstMan 的结果实际生成它的是第 1115 行定义的 Human 类构造函数中的 cout 语句。注意到该构造函数将 age 初始化为零。如果您忘记给新创建的对象设置 age 也没有关系该构造函数将确保 age 不是随机值而是零。
该文章会更新欢迎大家批评指正。
推荐一个零声学院的C服务器开发课程个人觉得老师讲得不错
分享给大家LinuxNginxZeroMQMySQLRedis
fastdfsMongoDBZK流媒体CDNP2PK8SDocker
TCP/IP协程DPDK等技术内容
点击立即学习C/C后台高级服务器课程