嵌入式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

相关文章
|
4月前
|
网络协议 安全 Linux
Linux C/C++之IO多路复用(select)
这篇文章主要介绍了TCP的三次握手和四次挥手过程,TCP与UDP的区别,以及如何使用select函数实现IO多路复用,包括服务器监听多个客户端连接和简单聊天室场景的应用示例。
114 0
|
8天前
|
数据可视化 关系型数据库 MySQL
嵌入式C++、STM32、MySQL、GPS、InfluxDB和MQTT协议数据可视化
通过本文的介绍,我们详细讲解了如何结合嵌入式C++、STM32、MySQL、GPS、InfluxDB和MQTT协议,实现数据的采集、传输、存储和可视化。这种架构在物联网项目中非常常见,可以有效地处理和展示实时数据。希望本文能帮助您更好地理解和应用这些技术,构建高效、可靠的数据处理和可视化系统。
126 82
|
4月前
|
存储 Linux C语言
Linux C/C++之IO多路复用(aio)
这篇文章介绍了Linux中IO多路复用技术epoll和异步IO技术aio的区别、执行过程、编程模型以及具体的编程实现方式。
164 1
Linux C/C++之IO多路复用(aio)
|
7天前
|
消息中间件 Linux C++
c++ linux通过实现独立进程之间的通信和传递字符串 demo
的进程间通信机制,适用于父子进程之间的数据传输。希望本文能帮助您更好地理解和应用Linux管道,提升开发效率。 在实际开发中,除了管道,还可以根据具体需求选择消息队列、共享内存、套接字等其他进程间通信方
39 16
|
1月前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
95 15
|
2月前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
120 13
|
3月前
|
存储 编译器 C++
【c++】类和对象(下)(取地址运算符重载、深究构造函数、类型转换、static修饰成员、友元、内部类、匿名对象)
本文介绍了C++中类和对象的高级特性,包括取地址运算符重载、构造函数的初始化列表、类型转换、static修饰成员、友元、内部类及匿名对象等内容。文章详细解释了每个概念的使用方法和注意事项,帮助读者深入了解C++面向对象编程的核心机制。
156 5
|
3月前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
170 4
|
4月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
1014 3
|
4月前
|
资源调度 Linux 调度
Linux C/C++之线程基础
这篇文章详细介绍了Linux下C/C++线程的基本概念、创建和管理线程的方法,以及线程同步的各种机制,并通过实例代码展示了线程同步技术的应用。
58 0
Linux C/C++之线程基础