CPerson::CPerson(long i,char* p,int a) { ID=i; Name=new char[strlen(p)+1]; strcpy(Name,p); Age=a; }

时间: 2023-12-06 08:41:37 浏览: 27
这是一个 C++ 类 CPerson 的构造函数。函数的参数包括长整型 i、字符指针 p 和整型 a。函数体内部首先将 i 赋值给类的成员变量 ID,然后分配内存空间给类的成员变量 Name,并将 p 中的字符串复制到 Name 中。最后将 a 赋值给类的成员变量 Age。需要注意的是,在使用完 Name 后需要手动释放内存空间,否则容易造成内存泄漏。
相关问题

CPerson::CPerson(const CPerson& ob)//拷贝构造函数定义 { ID=ob.ID; Name=new char[strlen(ob.Name)+1]; strcpy(Name,ob.Name); Age=ob.Age; }

这是一个类CPerson的拷贝构造函数的定义。拷贝构造函数用于在创建对象时,使用已存在的对象来初始化新创建的对象。它的参数是一个常量引用,表示要拷贝的对象。下面是函数的具体实现: ``` CPerson::CPerson(const CPerson& ob) { ID = ob.ID; Name = new char[strlen(ob.Name) + 1]; strcpy(Name, ob.Name); Age = ob.Age; } ``` 在这个函数中,首先将参数对象的ID赋值给新创建的对象的ID。然后,使用动态内存分配来为新对象的Name成员变量分配内存。这里使用了strlen()函数来计算字符串的长度,并且需要加1,以便为字符串末尾的空字符留出空间。接下来,使用strcpy()函数将参数对象的Name成员变量的值复制到新对象的Name成员变量中。最后,将参数对象的Age赋值给新对象的Age成员变量。这样,新对象就完成了从参数对象的拷贝。

#include<iostream> using namespace std; class CPerson{ protected: long id; char* name; int age; public: CPerson(long i,char* n,int a):id(i),name(n),age(a){ } CPerson(){ } CPerson(const CPerson &C){ id=C.id; name=C.name; age=C.age; } ~CPerson(){ delete name; } void set(){ cout<<"ID:"; cin>>id; cout<<"NAME:"; cin>>name; cout<<"AGE:"; cin>>age; } void display(){ cout<<"id:"<<id<<" name:"<<name<<" age:"<<age<<endl; } }; int main(){ CPerson obj1(1002,"LiMing",22); obj1.display(); CPerson obj2(obj1); obj2.set(); obj2.display(); return 0; }为什么警告

在这段代码中,有两个问题会导致警告: 1. 字符串指针未初始化。在类中,使用 `char*` 类型的字符串指针作为成员变量,需要在构造函数中对其进行初始化,否则会导致未定义的行为。可以使用动态内存分配来初始化字符串指针,例如 `name = new char[20];`。 2. 拷贝构造函数未正确实现。在拷贝构造函数中,需要将字符串指针所指向的内存空间也进行拷贝,而不仅仅是拷贝指针本身。可以使用 `strcpy()` 函数来实现字符串指针的拷贝,例如 `strcpy(name, C.name);`。同时,需要注意对字符串指针进行内存分配和释放。 修复后的代码如下: ```c++ #include <iostream> #include <cstring> using namespace std; class CPerson { protected: long id; char* name; int age; public: CPerson(long i, char* n, int a) : id(i), age(a) { name = new char[strlen(n) + 1]; strcpy(name, n); } CPerson() { id = 0; name = new char[1]; name[0] = '\0'; age = 0; } CPerson(const CPerson& C) { id = C.id; age = C.age; name = new char[strlen(C.name) + 1]; strcpy(name, C.name); } ~CPerson() { delete[] name; } void set() { cout << "ID:"; cin >> id; cout << "NAME:"; char tmp[20]; cin >> tmp; if (name != nullptr) { delete[] name; } name = new char[strlen(tmp) + 1]; strcpy(name, tmp); cout << "AGE:"; cin >> age; } void display() { cout << "id:" << id << " name:" << name << " age:" << age << endl; } }; int main() { CPerson obj1(1002, "LiMing", 22); obj1.display(); CPerson obj2(obj1); obj2.set(); obj2.display(); return 0; } ```

相关推荐

最新推荐

recommend-type

pre_o_1csdn63m9a1bs0e1rr51niuu33e.a

pre_o_1csdn63m9a1bs0e1rr51niuu33e.a
recommend-type

matlab建立计算力学课程的笔记和文件.zip

matlab建立计算力学课程的笔记和文件.zip
recommend-type

FT-Prog-v3.12.38.643-FTD USB 工作模式设定及eprom读写

FT_Prog_v3.12.38.643--FTD USB 工作模式设定及eprom读写
recommend-type

matlab基于RRT和人工势场法混合算法的路径规划.zip

matlab基于RRT和人工势场法混合算法的路径规划.zip
recommend-type

matlab基于matlab的两步定位软件定义接收机的开源GNSS直接位置估计插件模块.zip

matlab基于matlab的两步定位软件定义接收机的开源GNSS直接位置估计插件模块.zip
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

2. 通过python绘制y=e-xsin(2πx)图像

可以使用matplotlib库来绘制这个函数的图像。以下是一段示例代码: ```python import numpy as np import matplotlib.pyplot as plt def func(x): return np.exp(-x) * np.sin(2 * np.pi * x) x = np.linspace(0, 5, 500) y = func(x) plt.plot(x, y) plt.xlabel('x') plt.ylabel('y') plt.title('y = e^{-x} sin(2πx)') plt.show() ``` 运行这段
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。