设为首页 加入收藏

TOP

现代C++学习指南-具体类(四)
2023-07-23 13:26:33 】 浏览:88
Tags:现代 习指南
eam& os,const Sample& sample) { os << "Sample value is " << sample.value << std::endl; return os; } //其余不变 } int main() { Sample a{ 1 }; std::cout << a << std::endl; } // 输出 // Create value = 1 // Sample value is 1

函数<<是友元函数,因为函数声明有关键字friend。友元函数不是成员函数,想在函数体访问到成员变量,需要添加函数参数。那么函数参数有很多个,怎样确定参数私有成员的可访问性呢,这就得看这个友元函数声明在哪个类里面了,友元函数的声明位置直接确定了它访问私有成员的范围。

特殊的成员函数

C++的类有极大的定制性,这种定制性不仅仅表现在数据上,还表现在成员函数上。我们知道一般的成员函数都是使用.来调用的,但是出于特殊的场景,有些情况下这种调用形式不仅仅不直观,还效率不高。所以C++提出了运算符的概念。之所以称为运算符,是因为函数的调用和传参形式和普通的成员函数不一样。定义良好的运算符可大大提高代码的可读性。如

  • []操作符是下标运算符,有了它的帮助,我们就可以像obj[2]这样取容器中的元素了。
  • ()则可以把对象当成函数一样直接调用,实现函数式编程的效果。
  • ->可以返回另外的对象,使得它可以表现出另一个对象的行为。

还有其他的诸如++--等操作符,在定义特定类型的类时,提供合适的运算符函数能使我们的类更简洁、好用。

总结

总的来说,类是一个数据管理器,构造函数控制数据生成,来源可以使其他类型,也可以是相同类型。用相同类型生成新数据的时候,有复制和移动两种选择。复制构造函数控制相同类型的数据共享行为,其主要目标就是实现两个类型在构造函数完成那一刻,在内存中的数据是完全一致的。移动构造函数的目标则是将现有的数据转移到当前构造的对象上来,然后使现有的数据失效,从而达到减少对象创建、销毁,增加内存利用率的目的。除此之外,还能使用成员函数改变或者访问数据,最终在析构函数中结束数据的生命。此外友元类或者友元函数也是一种数据访问途径。
具体类的主要矛盾是数据,设计类的关键还是要弄清数据流向。数据自身在内部能有什么状态,能实现什么行为,是成员函数该完成的工作。此外还要考虑相同类型相互构造时数据的共享情况,是完全隔离,还是相互影响,这些都是应该考虑的问题。毕竟确保数据从创建到销毁的可靠性和有效性是一个具体类应该完成的基本功能。

首页 上一页 1 2 3 4 下一页 尾页 4/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C++异常处理机制 下一篇MFC中使用多线程

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目