已知String类定义如下:
class String
{
public:
String(const char *str = NULL); // 通用构造函数
String(const String &another); // 拷贝构造函数
~ String(); // 析构函数
String & operater =(const String &rhs); // 赋值函数
private:
char *m_data; // 用于保存字符串
};
尝试写出类的成员函数实现。
答案:
String::String(const char *str)
{
if ( str == NULL ) //strlen在参数为NULL时会抛异常才会有这步判断
{
m_data = new char[1] ;
m_data[0] = ‘\0′ ;
}
else
{
m_data = new char[strlen(str) + 1];
strcpy(m_data,str);
}
}
String::String(const String &another)
{
m_data = new char[strlen(another.m_data) + 1];
strcpy(m_data,other.m_data);
}
String& String::operator =(const String &rhs)
{
if ( this == &rhs)
return *this ;
delete []m_data; //删除原来的数据,新开一块内存
m_data = new char[strlen(rhs.m_data) + 1];
strcpy(m_data,rhs.m_data);
return *this ;
}
String::~String()
{
delete []m_data ;
}
分享到:
相关推荐
在传统情况下,尝试通过空指针调用成员函数会导致程序崩溃,因为没有实际的对象来执行这些操作。然而,C++引入了虚函数机制,允许我们安全地处理这种情况。 虚函数的主要作用在于实现多态性,即同一类型的指针可以...
创建自己的`String`类通常是学习面向对象编程时的一个常见练习,目的是更好地理解类的构造、成员函数、内存管理和继承等概念。 自定义的`String`类可能包含以下关键组成部分: 1. **构造函数**:这是创建新对象时...
这两个成员函数是C++中实现对象复制的关键。复制构造函数在创建新对象时调用,而赋值运算符`=`在对象之间进行赋值时调用。确保这两个函数正确实现了深复制,以避免意外地共享或丢失内存资源。 在完成`CArray`类的...
- **侦听阶段**:服务器首先需要调用CSocket的成员函数`Create()`创建一个套接字,然后通过`Listen()`开启监听状态,设置最大连接队列长度。 - **接受连接**:当有客户端请求连接时,服务器调用`Accept()`函数,该...
学习者可能正在尝试通过创建一个玫瑰花类来学习如何定义对象、封装数据、以及实现方法。调试文件的存在提示了作者可能正在对代码进行测试和优化,以确保其按预期工作。在这个过程中,学习者会遇到如何正确地组织代码...
每个类都包含数据成员(变量)和成员函数(方法),用于存储和操作与该类相关的数据。 2. **数据封装**: - 数据封装是OOP的基础,它隐藏了类内部的数据细节,只通过公共接口(公有成员函数)与外界交互。例如,`...
选项2中`operator-`有两个参数,这意味着它不能作为类`Value`的成员函数实现。 #### 六、static关键字 **题目:** static在C和C++中表示什么? **答案:** - **在C中**:`static`关键字主要用于局部变量,使得...
- 在类定义体中给出完整定义的成员函数属于内联函数。 - 类的成员默认访问权限是private(私有)。 - 面向对象中的基本单位是对象,每个对象都是所属类的一个实例,对象的隐藏实现细节是封装的体现。 7. **改错...
为了进一步学习面向对象编程,我们可以考虑如何将这些函数封装到一个类中,例如创建一个名为`ArrayUtils`的类,其中包含成员函数`findMax`和`findSecondMax`。这样,我们可以通过类的对象来调用这些操作,使得代码...
- **类模板与函数模板**:在使用类模板时,如果需要将模板函数或类的成员函数声明为友元,必须显式地使用类型参数。 #### 类模板 - **类模板声明**:类模板允许创建参数化类,即类的行为和属性可以基于传递的类型...
18. **const成员函数**:`const`写在成员函数的函数头和函数体之间,表明该函数不会修改对象的状态,即`this`指针被修饰为常量。 19. **成员访问运算符**:`.`用于访问对象的成员,`->`用于访问指针所指向的对象的...
- 友元(Friend)是非成员函数或类,它可以访问另一个类的私有或受保护的成员。 3. **C++语法** - 字符型变量`ch`只能赋值给单个字符,如`'\xff'`,但不能赋值给字符串或含有多个字符的值。 - 在C++中,标识符...
构造函数内部通过`setOption`私有函数来将选项数组中的值赋给类的私有成员变量。 #### 文件上传路径的验证 在文件上传之前,必须确保上传路径存在且可写。`checkfilePath`私有函数用于检查和创建上传路径,如果路径...
在每个函数实现中,我们使用MFC的成员函数与控件交互,如`GetDlgItemText`获取文本框的输入,`CListBox::AddString`添加名字到列表,`CListBox::DeleteString`删除指定索引的名字,以及`CListBox::GetCount`和`...
由于没有提供具体的代码实现,这里只能给出大致的类设计和操作流程。实际的代码实现会根据作者的设计选择不同的数据结构和算法,以及错误处理机制。如果你需要具体代码,可以尝试解压"读写ini的C++类.rar"并查看...
2. 对象间的通信:在C++程序中,对象之间的通信主要是通过调用成员函数来实现的。选项B正确,其他选项如继承、封装和函数重载是面向对象编程的特性,但不是直接通信的方式。 3. 析构函数的个数:每个类最多只能有一...
`LogFile.cpp`通常包含了类的成员函数实现,包括对文件I/O操作的封装,而`LogFile.h`则定义了类的接口,声明了公开的成员函数和数据成员。开发者可以在这个头文件中查找类的使用方法,例如构造函数、析构函数,以及...
1. **对象与类**:在面向对象编程中,类是创建对象的模板,它定义了一组属性(数据成员)和方法(成员函数)。对象则是类的实例,具有类定义的属性和行为。通过创建和操作对象,程序员可以实现复杂的逻辑。 2. **...
在每个源文件的头部应该明确写出版权信息以及版本声明。这有助于追踪代码的所有权和修改历史。 **1.2 头文件的结构** 头文件通常用于声明类、函数等,其结构应清晰明了。一般包括: - `#ifndef`/`#define`/`#endif...
在使用过程中,应充分理解CSerialPort类的各个成员函数,以及串口通信的基本原理,以便更好地适应各种应用场景。在压缩包文件"SerialPort"中,可能包含了这个CSerialPort类的源代码和其他相关示例,通过研究这些代码...