C++下面的类方法的参数和返回值,什么时候用* 什么时候用&

bandaoyu 2019-03-14 01:58:13

下面的方法的参数和返回值,什么时候用* 什么时候用&,有谁能讲讲,举一反三更好


1、
String(const char *str = NULL); //通用构造函数
String(const String &str); //拷贝构造函数

2、下面有的返回 String 有的返回& ?

String operator+(const String &str) const; //重载+
String& operator=(const String &str); //重载=
String& operator+=(const String &str); //重载+=

class String
{
public:
String(const char *str = NULL); //通用构造函数
String(const String &str); //拷贝构造函数
~String(); //析构函数

String operator+(const String &str) const; //重载+
String& operator=(const String &str); //重载=
String& operator+=(const String &str); //重载+=
bool operator==(const String &str) const; //重载==
char& operator[](int n) const; //重载[]

size_t size() const; //获取长度
const char* c_str() const; //获取C字符串

friend istream& operator>>(istream &is, String &str);//输入
friend ostream& operator<<(ostream &os, String &str);//输出

private:
char *data; //字符串
size_t length; //长度
};
...全文
328 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bandaoyu 2019-03-19
  • 打赏
  • 举报
回复
引用 11 楼 唯恐天下不乱 的回复:
哈哈,多多交流,我也是最近才看到的 但是记得不是太清晰
唯恐天下不乱 2019-03-19
  • 打赏
  • 举报
回复
是的,误人子弟啊。

引用 10 楼 bandaoyu 的回复:
引用 9 楼 唯恐天下不乱 的回复:
“但不加,在继承派生的时候会出现父类不被调用的情况。”是不是说反了, 应该是不加会出现调用父类,而不调用派生类的析构函数吧[/quote]
bandaoyu 2019-03-19
  • 打赏
  • 举报
回复
引用 9 楼 唯恐天下不乱 的回复:
[/quote]“但不加,在继承派生的时候会出现父类不被调用的情况。”是不是说反了, 应该是不加会出现调用父类,而不调用派生类的析构函数吧
唯恐天下不乱 2019-03-19
  • 打赏
  • 举报
回复
纯虚函数不是必要,加了绝大部分不会有什么问题,但不加,在继承派生的时候会出现父类不被调用的情况。
所以一些公司会强制要求写成纯虚函数。

引用 5 楼 bandaoyu 的回复:
[quote=引用 2 楼 唯恐天下不乱 的回复:]
是呀,初学的,见笑了。

还有就是 析构函数不是应该声明为纯虚函数吗? [/quote]
bandaoyu 2019-03-14
  • 打赏
  • 举报
回复
引用 7 楼 uouo88 的回复:
[quote=引用 6 楼 bandaoyu 的回复:]
[quote=引用 4 楼 uouo88 的回复:]
所噶! 确实,string 本来就不需要派生,不做抽象类,所以析构函数不需要定义成虚函数! 多谢
uouo88 2019-03-14
  • 打赏
  • 举报
回复
引用 6 楼 bandaoyu 的回复:
[quote=引用 4 楼 uouo88 的回复:]
有时候选用这两种类型的时候还要考虑代码的可读性

嗯 ,还有就是 析构函数不是应该声明为纯虚函数吗? 为什么这个示例代码没有定义为纯虚函数[/quote]

有两个概念,1.析构方法是用来释放对象资源的,虚函数是实现C++多态用的,用virtual来标记,其中纯虚函数又是一个特殊的虚函数(类似于这种形式 virtual ~XXX()=0),有纯虚函数的类是一个抽象类,不能直接实例化,需要派生类去实现纯虚函数才能创建对象。

2.C++中基类采用virtual虚析构函数是为了防止内存泄漏。具体地说,如果派生类中申请了内存空间,并在其析构函数中对这些内存空间进行释放。假设基类中采用的是非虚析构函数,当删除基类指针指向的派生类对象时就不会触发动态绑定,因而只会调用基类的析构函数,而不会调用派生类的析构函数。那么在这种情况下,派生类中申请的空间就得不到释放从而产生内存泄漏。所以,为了防止这种情况的发生,C++中基类的析构函数应采用virtual虚析构函数。

结合你的问题,你这里应该问的是 析构函数是不是应该声明为虚函数吧? 如果它不作为基类,就不需要声明虚函数,如果有类需要从它派生,那么最好将该析构方法前面加上virtual,也就是变为虚函数。
bandaoyu 2019-03-14
  • 打赏
  • 举报
回复
引用 4 楼 uouo88 的回复:
有时候选用这两种类型的时候还要考虑代码的可读性

嗯 ,还有就是 析构函数不是应该声明为纯虚函数吗? 为什么这个示例代码没有定义为纯虚函数
bandaoyu 2019-03-14
  • 打赏
  • 举报
回复
引用 2 楼 唯恐天下不乱 的回复:
是呀,初学的,见笑了。

还有就是 析构函数不是应该声明为纯虚函数吗?
uouo88 2019-03-14
  • 打赏
  • 举报
回复
有时候选用这两种类型的时候还要考虑代码的可读性
uouo88 2019-03-14
  • 打赏
  • 举报
回复
引用类型不需要释放内存,指针类型适用的范围更广,操作更灵活,我觉得没有严格的使用限制或者区分,要具体看场景,怎么方便怎么来
唯恐天下不乱 2019-03-14
  • 打赏
  • 举报
回复
1.类型不同
2.返回自己。用法不止这一种。
-
表达能力有限,楼主代码写少了。
bandaoyu 2019-03-14
  • 打赏
  • 举报
回复
还有就是 析构函数不是应该声明为纯虚函数吗?

64,687

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧