宁以non-member、non-friend替换member函数本节作者阐述了为什么在实现一些功能的时候,应该偏向于选择非成员函数并且是非友元函数。这样做总结一句话,就是最大限度的实现类的封装性。封装意味着不可见。愈多东西被封装,欲少人可以看到它,我们就有愈大的弹性去改变它。愈少代码可以看到数据(访问数据),愈多数据可被封装,我们就更有自由来改变对象数据。愈多函数可以访问它,数据的封装性就愈低。我...
分类:
编程语言 时间:
2015-06-27 11:44:21
阅读次数:
160
1 #include 2 using namespace std; 3 class Complex{ 4 public: 5 Complex(double r=0.0,double i=0.0):real(r),imag(i){} 6 friend Complex operator...
分类:
编程语言 时间:
2015-06-18 12:57:12
阅读次数:
226
运算符重载的两种方式对于很多运算符来说,可以选择使用成员函数或非成员函数来实现运算符重载。一般来说非成员函数应该是友元函数,这样才能直接访问类的私有数据。例如,Time类的加法运算符在Time类声明中的原型为:Time operator+(const Time &t) const; //member...
分类:
编程语言 时间:
2015-06-17 13:11:59
阅读次数:
137
本节条款:需要类型转换时请为模板定义非成员函数这节知识是在条款24的基础上,讲述的有关非成员函数在模板类中(non-member function template)的作用。
我们先看一下条款24讲述的知识核心。条款24讲述了我们如何能实现类的对象在特定条件下的隐式转换问题。
我们先看以下代码:**例一:**#include
#include
using...
分类:
编程语言 时间:
2015-06-08 11:42:20
阅读次数:
150
有些情况下,允许特定的非成员函数访问一个类的私有成员,同时仍阻止一般的访问,这是很方便做到的。例如被重载的操作符,如输入或输出操作符,经常需要访问类的私有数据成员。
友元(frend)机制允许一个类将对其非公有成员的访问权授予指定的函数或者类,友元的声明以frend开始,它只能出现在类定义的内部,友元声明可以出现在类中的任何地方:友元不是授予友元关系的那个类的成员,所有它们不受其声明出现部分的访...
分类:
编程语言 时间:
2015-06-08 09:52:36
阅读次数:
135
**用成员初值列初始化成员对象:
我们习惯上的错误**
用default构造函数的方法初始化
non-local-static非成员函数内部静态变量初始化先后有要求的,则其初始化需要一个“仿真函数”:
注意:...
分类:
其他好文 时间:
2015-05-08 18:14:39
阅读次数:
131
这样做的第一个理由是增加封装性,咳咳,这听起来有点矛盾,因为non-member且non-friend成员函数要想处理某个类中的数据的话,就得看到(即能访问)该类中的数据,那么数据就得是public的。这明显破坏了封装。嗯,解释一下,不是每个函数都要明确看到数据才能处理,它可以调用类中的一序列public函数来完成任务,这些public函数可以明确地看到类中的数据,如果我们把调用他们的函数作为mem...
分类:
其他好文 时间:
2015-04-22 22:21:57
阅读次数:
99
(3)友元函数提供了一种非成员函数访问私有数据成员的途径,模板类使类中的数据成员的类型变得灵活,这两种技术可以结合起来用。要求在前面方案的基础上支持用友员函数实现的加法。用于测试的main()函数如下:
int main( )
{
Complex c1(3,4),c2(5,-10),c3;
c3=c1.complex_add(c2); //调用成员函数支持加法运算,有一个形参
...
分类:
其他好文 时间:
2015-04-19 14:42:27
阅读次数:
146
看这个章节的时候又跑回去看了一下 条款 24,本章的例子就是基于下面这个例子而来的。在 item 24 中,支持混合运算的示例代码如下: 1 class Rational { 2 public: 3 Rational(int numerator = 0, int...
分类:
编程语言 时间:
2015-04-19 12:53:31
阅读次数:
305
传值方式是位拷贝形式,包括对象不调用构造函数,但会调用其析构函数
如果设计了拷贝函数,当从现有的对象创建新对象时,编译器将不使用位拷贝。编译器总是调用我们的拷贝构造函数(c++编译器自动创建的拷贝构造函数也是位拷贝的,是不安全的。所以一般自己创建。)
又一个简单的技术防止通过按值传递方式传递:声明一个私有拷贝构造函数。甚至不必去定义它,除非成员函数或友元函数需要执行按值传递方式的传递。如果用户...
分类:
其他好文 时间:
2015-04-17 18:18:22
阅读次数:
120