首页 > 编程语言 >C++面试题(四)

C++面试题(四)

时间:2022-12-08 17:32:58浏览次数:43  
标签:面试题 String cout C++ other str NULL 构造函数

 ​

待续


#include <QCoreApplication>
#include <QTextStream>
#include<iostream>

using namespace std;
class String
{
public:
String(const char *str=NULL); //普通构造函数
String(const String &other); //复制构造函数
~String(void); //析构函数
String & operator=(const String &other);//赋值函数
private:
char *m_String; //私有成员,保存字符串
};
/*
*普通构造函数
*构造函数首先根据一个字符串常量创建一个String对象。
*这个构造函数首先分配了足够的内存,然后把这个字符串常量复制到这块内存
*/

String::String(const char *str)
{
cout<<"普通构造函数"<<endl;
if(str==NULL) //如果str为空,存空字符串
{
m_String=new char[1]; //分配一个字节
if (m_String==NULL)
{//内存是否申请成功
std::cout<<"申请内存失败!"<<std::endl;
exit(1);
}
*m_String='\0'; //将之赋值为字符串结束符
}
else
{
m_String=new char[strlen(str)+1]; //分配空间容纳str内容
if (m_String==NULL)
{//内存是否申请成功
std::cout<<"申请内存失败!"<<std::endl;
exit(1);
}
strcpy(m_String,str); //赋值str到私有成员
}
}
/*
*拷贝构造函数
*所有需要分配系统资源的用户定义类型都需要一个拷贝构造函数
*它可以在函数调用中以传值得方式传递一个String类型的参数
*并且在当一个函数以值得形式返回String对象时实现“返回时复制”
*/

String::String(const String &other)
{
cout<<"复制构造函数"<<endl;
m_String=new char[strlen(other.m_String)+1];

if (m_String==NULL)
{//内存是否申请成功
std::cout<<"申请内存失败!"<<std::endl;
exit(1);
}

strcpy(m_String,other.m_String);
}
/*
*定义析构函数是为了方式内存泄露,当一个String对象超出
*它的作用域时,析构函数就会释放它所占用的内存
*/

String::~String(void)
{
cout<<"析构函数"<<endl;
if(m_String!=NULL) //如果m_String 不为NULL,释放堆内存
{
delete [] m_String; //释放后置为NULL
m_String=NULL;
}
}
/*
*赋值函数实现字符串的传值活动
*/

String & String::operator =(const String &other)
{
cout<<"赋值函数"<<endl;
if(this==&other) //如果对象与other是同一个对象
{
return *this; //直接返回本身
}
delete [] m_String;
m_String=new char[strlen(other.m_String)+1];

if (m_String==NULL)
{//内存是否申请成功
std::cout<<"申请内存失败!"<<std::endl;
exit(1);
}
strcpy(m_String,other.m_String);
return *this;
}

int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
printf("mystring");
getchar();

String strA("hello"); //调用普通构造函数
String strB("word"); //调用普通构造函数
String strC(strA); //调用复制构造函数
strC=strB; //调用赋值函数
QTextStream qin(stdin);
QTextStream qout(stdout);

QString qstr;
qin>>qstr;
qout<<qstr<<endl;

return a.exec();


}


标签:面试题,String,cout,C++,other,str,NULL,构造函数
From: https://blog.51cto.com/u_6958388/5922967

相关文章

  • c++ stl总结
    前言本篇是c++总结系列的stl篇,重点讲解容器,及effectivestl的总结stl原理stl提供六大部件,这六大部件可以彼此搭配工作,这六大部件是:容器。各种数据结构迭代器。扮演容......
  • windows下c++设置防火墙
     /*Copyright(c)MicrosoftCorporationSYNOPSISSamplecodefortheWindowsFirewallCOMinterface.*/#include<windows.h>#include<cr......
  • (黑马)C++提高编程笔记
    文章目录​​1模板​​​​1.1模板的概念​​​​1.2函数模板​​​​1.2.1函数模板语法​​​​1.2.2函数模板注意事项​​​​1.2.3函数模板案例​​​​1.2.4普通......
  • C++的语法 学习笔记1
    C++的语法学习笔记1  C++各种数据类型的默认值数值类型int/double/float/long0char'\0'string"\0"bool0,也就是false  数......
  • windows C++
    #include<Windows.h>LRESULTCALLBACKWndProc(HWNDhWnd,UINTuMsg,WPARAMwParam,LPARAMlParam){  switch(uMsg){  caseWM_DESTROY:    ......
  • 简介(Beginning Visual C++ 2013)
    欢迎阅读IvorHorton的《VisualC++2013入门》。通过本书,您可以使用Microsoft最新的应用程序开发系统VisualStudioProfessional2013成为一名有效的C++程序员。我的目标......
  • C++学习---cstdio的源码学习分析01-类型定义
    引言cstdio文件是C++对stdio.h头文件的封装,StandardInputandOutputLibrary,定义了一系列标准输入输出函数,包括文件操作(fopen/fclose等),格式化打印(printf/scanf)等。通......
  • C++入门级基础知识汇总
    知识来源:https://www.imooc.com/learn/1304https://www.runoob.com/cplusplus/cpp-tutorial.html 编程第一步导入头文件:#include<stdio.h>std=standard......
  • C++
    通讯录管理系统1、系统需求通讯录是一个可以记录亲人、好友信息的工具。本教程主要利用C++来实现一个通讯录管理系统系统中需要实现的功能如下:添加联系人:向通讯录中......
  • 【大厂面试题-字节】2019春招面试第一题
    题目描述我叫王大锤,是一家出版社的编辑。我负责校对投稿来的英文稿件,这份工作非常烦人,因为每天都要去修正无数的拼写错误。但是,优秀的人总能在平凡的工作中发现真理。我......