嵌入式linux基础:c++(五)构造函数

简介: 嵌入式linux基础:c++(五)构造函数

1. 构造函数


为什么引入构造函数?

看一看之前写的程序:

1671003110704.jpg

如图所示,该部分的设置名字以及设置年龄分别用来两个函数,这回变的非常麻烦。所以提出构造函数的概念,

#include <iostream>
using namespace std;
class Person {
private:
  char *name;
  int age;
  char *work;
public:
  Person() {cout <<"Pserson()"<<endl;}
  Person(char *name) 
  {
  cout <<"Pserson(char *)"<<endl;
  this->name = name;
  }
  Person(char *name, int age, char *work = "none") //char *work = "none",初始化的时候如果说,work没有参数,那么就赋值none
  {
  cout <<"Pserson(char*, int)"<<endl;
  this->name = name;
  this->age = age;
  this->work = work;
  }
//构造函数,没有返回值,没有定义返回类型。
/*  void setName(char *n)
  {
  name = n;
  }
  int setAge(int a)
  {
  if (a < 0 || a > 150)
  {
    age = 0;
    return -1;
  }
  age = a;
  return 0;
  }
*/
  void printInfo(void)
  {
  //printf("name = %s, age = %d, work = %s\n", name, age, work); 
  cout<<"name = "<<name<<", age = "<<age<<", work = "<<work<<endl;
  }
};
int main(int argc, char **argv)
{
  Person per("zhangsan", 16);//根据函数参数调用函数
  Person per2;   /* 调用无参数构造函数 */
  Person per3(); /* int fun(); */
  per.printInfo();
  return 0;
}


我们还有没有其他办法来实例化一个对象呢?

有的,这里我们直接定义

#include <iostream>
using namespace std;
class Person {
private:
  char *name;
  int age;
  char *work;
public:
  Person() {cout <<"Pserson()"<<endl;}
  Person(char *name) 
  {
  cout <<"Pserson(char *)"<<endl;
  this->name = name;
  }
  Person(char *name, int age, char *work = "none") 
  {
  cout <<"Pserson(char*, int)"<<endl;
  this->name = name;
  this->age = age;
  this->work = work;
  }
/*  void setName(char *n)
  {
  name = n;
  }
  int setAge(int a)
  {
  if (a < 0 || a > 150)
  {
    age = 0;
    return -1;
  }
  age = a;
  return 0;
  }
*/
  void printInfo(void)
  {
  //printf("name = %s, age = %d, work = %s\n", name, age, work); 
  cout<<"name = "<<name<<", age = "<<age<<", work = "<<work<<endl;
  }
};
int main(int argc, char **argv)
{
  Person per("zhangsan", 16);
  Person per2;   /* 调用无参数构造函数 */
  Person per3(); /* int fun(); */
  Person *per4 = new Person;//临时动态创建一个person
  Person *per5 = new Person();
  //我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。
  Person *per6 = new Person[2];
  Person *per7 = new Person("lisi", 18, "student");
  Person *per8 = new Person("wangwu", 18);
  per.printInfo();
  per7->printInfo();
  per8->printInfo();
  delete per4;
  delete per5;
  delete []per6;
  delete per7;
  delete per8;
//删掉new创建出来的内存
  return 0;
}

1671003087948.jpg

相关文章
|
23天前
|
网络协议 算法 Linux
【嵌入式软件工程师面经】Linux网络编程Socket
【嵌入式软件工程师面经】Linux网络编程Socket
40 1
|
14天前
|
存储 网络协议 编译器
【干货总结】Linux C/C++面试知识点
Linux C/C++基础与进阶知识点,不仅用于面试,平时开发也用得上!
430 8
|
8天前
|
Linux vr&ar C语言
Linux怎样更新Centos下Gcc版本支持C17?Centos7快速安装gcc8.3.1 可支持C++17(附gcc相关链接整理)
Linux怎样更新Centos下Gcc版本支持C17?Centos7快速安装gcc8.3.1 可支持C++17(附gcc相关链接整理)
29 2
|
10天前
|
安全 编译器 C++
C++一分钟之-构造函数与析构函数
【6月更文挑战第20天】C++中的构造函数初始化对象,析构函数负责资源清理。构造函数有默认、参数化和拷贝形式,需注意异常安全和成员初始化。析构确保资源释放,避免内存泄漏,要防止重复析构。示例代码展示了不同构造函数和析构函数的调用情况。掌握构造和析构是有效管理对象生命周期和资源的关键。
25 2
|
11天前
|
Linux C++
c++高级篇(三) ——Linux下IO多路复用之poll模型
c++高级篇(三) ——Linux下IO多路复用之poll模型
|
11天前
|
缓存 监控 网络协议
c++高级篇(二) ——Linux下IO多路复用之select模型
c++高级篇(二) ——Linux下IO多路复用之select模型
|
2天前
|
存储 编译器 C++
【C++】类和对象④(再谈构造函数:初始化列表,隐式类型转换,缺省值
C++中的隐式类型转换在变量赋值和函数调用中常见,如`double`转`int`。取引用时,须用`const`以防修改临时变量,如`const int& b = a;`。类可以有隐式单参构造,使`A aa2 = 1;`合法,但`explicit`关键字可阻止这种转换。C++11起,成员变量可设默认值,如`int _b1 = 1;`。博客探讨构造函数、初始化列表及编译器优化,关注更多C++特性。
|
2天前
|
存储 编译器 C语言
【C++】类和对象②(类的默认成员函数:构造函数 | 析构函数)
C++类的六大默认成员函数包括构造函数、析构函数、拷贝构造、赋值运算符、取地址重载及const取址。构造函数用于对象初始化,无返回值,名称与类名相同,可重载。若未定义,编译器提供默认无参构造。析构函数负责对象销毁,名字前加`~`,无参数无返回,自动调用以释放资源。一个类只有一个析构函数。两者确保对象生命周期中正确初始化和清理。
|
4天前
|
域名解析 网络协议 程序员
程序员必知:【转】adns解析库——域名解析实例(C++、linux)
程序员必知:【转】adns解析库——域名解析实例(C++、linux)
11 0
|
4天前
|
域名解析 网络协议 程序员
程序员必知:【转】adns解析库——域名解析实例(C++、linux)
程序员必知:【转】adns解析库——域名解析实例(C++、linux)