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

相关文章
|
1月前
|
网络协议 安全 Linux
Linux C/C++之IO多路复用(select)
这篇文章主要介绍了TCP的三次握手和四次挥手过程,TCP与UDP的区别,以及如何使用select函数实现IO多路复用,包括服务器监听多个客户端连接和简单聊天室场景的应用示例。
86 0
|
1月前
|
存储 Linux C语言
Linux C/C++之IO多路复用(aio)
这篇文章介绍了Linux中IO多路复用技术epoll和异步IO技术aio的区别、执行过程、编程模型以及具体的编程实现方式。
72 1
Linux C/C++之IO多路复用(aio)
|
1月前
|
资源调度 Linux 调度
Linux c/c++之进程基础
这篇文章主要介绍了Linux下C/C++进程的基本概念、组成、模式、运行和状态,以及如何使用系统调用创建和管理进程。
33 0
|
4天前
|
存储 编译器 C++
【c++】类和对象(中)(构造函数、析构函数、拷贝构造、赋值重载)
本文深入探讨了C++类的默认成员函数,包括构造函数、析构函数、拷贝构造函数和赋值重载。构造函数用于对象的初始化,析构函数用于对象销毁时的资源清理,拷贝构造函数用于对象的拷贝,赋值重载用于已存在对象的赋值。文章详细介绍了每个函数的特点、使用方法及注意事项,并提供了代码示例。这些默认成员函数确保了资源的正确管理和对象状态的维护。
21 4
|
1月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
254 3
|
1月前
|
资源调度 Linux 调度
Linux C/C++之线程基础
这篇文章详细介绍了Linux下C/C++线程的基本概念、创建和管理线程的方法,以及线程同步的各种机制,并通过实例代码展示了线程同步技术的应用。
26 0
Linux C/C++之线程基础
|
1月前
|
Linux C++
Linux C/C++之IO多路复用(poll,epoll)
这篇文章详细介绍了Linux下C/C++编程中IO多路复用的两种机制:poll和epoll,包括它们的比较、编程模型、函数原型以及如何使用这些机制实现服务器端和客户端之间的多个连接。
23 0
Linux C/C++之IO多路复用(poll,epoll)
|
1月前
|
网络协议 Linux 网络性能优化
Linux C/C++之TCP / UDP通信
这篇文章详细介绍了Linux下C/C++语言实现TCP和UDP通信的方法,包括网络基础、通信模型、编程示例以及TCP和UDP的优缺点比较。
35 0
Linux C/C++之TCP / UDP通信
|
1月前
|
消息中间件 Linux API
Linux c/c++之IPC进程间通信
这篇文章详细介绍了Linux下C/C++进程间通信(IPC)的三种主要技术:共享内存、消息队列和信号量,包括它们的编程模型、API函数原型、优势与缺点,并通过示例代码展示了它们的创建、使用和管理方法。
29 0
Linux c/c++之IPC进程间通信
|
1月前
|
Linux C++
Linux c/c++进程间通信(1)
这篇文章介绍了Linux下C/C++进程间通信的几种方式,包括普通文件、文件映射虚拟内存、管道通信(FIFO),并提供了示例代码和标准输入输出设备的应用。
23 0
Linux c/c++进程间通信(1)