栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++中调用复制(拷贝)函数的三种情况

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++中调用复制(拷贝)函数的三种情况

1.同一类中的对象1复制给对象2:

同样是Point p1; Point p2;

例如:

int main(){
Point p1(1,2);
Point p2=p1;   //这两种都会调用复制构造函数
Point p3(p1);
return 0;
}

2.以对象为函数的形参:

例如:

void fun(Point p){ //p 作为了形参

cout< 

3.函数返回是类的对象:

void fun2(){
Point p1(1,3);
return p1;
}

//或者还有返回*this的形式

void fun3(){
Point p2(5,8);
x+=4;
y+=6;
return *this;
}

注意:如果意外使用return *this;

导致调用的复制构造函数里面会输出多余的语句(这些语句不可删除)

那么我们应该 让此函数的返回类型改为 void

例题如下(让我记忆犹新)

​设计一个自己的字符串类MyString,内部有一个私有成员char *sptr;该成员用于创建字符串对象时,在内部使用动态内存分配的方法分配一个字符数组用于存储字符串的内容。

为该类设计构造函数、析构函数(对象析构时,要释放分配的数组) 为该类设计返回字符串实际长度的成员函数 为该类设计输出字符串内容的成员函数 为该类设计实现字符串连接和字符串复制的成员函数。字符串连接和字符串复制时,要求重新分配数组,并释放原有的数组。 main函数已经写好,请根据main函数的内容完成该类的设计:
int main(){
MyString s1;
MyString s2("Hello");
MyString s3(s2);

s1.printString();
s2.printString();
s3.printString();

cout< 
  

正确解答如下:

//不包括主函数main部分
#include
using namespace std;
class MyString{
 char *sptr;
 int size;
public:
 MyString(){
  size=0;
  sptr=new char[1];
  sptr[0]='';
  cout<<"Object Constructed. No Memory Allocated."< 

有什么疑问欢迎讨论 ^_^     ^_^     ^_^

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/923678.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号