友元函数

习题六

匿名 (未验证) 提交于 2019-12-03 00:34:01
一、填空题 (1)运算符的重载实际上是 函数 的重载。 (2)运算符函数必须被重载为 非静态成员函数 ,或被重载为 友元函数 。 (3)成员函数重载运算符需要的参数的个数总比它的操作数 少 一个。 (4)重载赋值运算符时,通常返回调用该运算符的 对象的引用, 这样赋值就能进行连续赋值操作。 1 个形参,且规定其参数的类型 整 型 。 (6)重载调用运算符函数可以带有 多 个参数。 二、选择题 (1)下列运算符中,不能被重载的是(B)。 (2)下列描述重载运算符的规则中,不正确的是(C)。 (3)下列运算符中,不能有友元函数重载的是(A) (4)下列描述中,不正确的是(C)。 三、判断题 (1)下标运算符的重载提供了在C++中实现安全的数组下标的一种方法。(对) (2)对下标运算符“[ ]”,即可重载为类成员函数,又可重载为友元函数。(错) (3)重载后缀“++”运算符时多给出的一个int参数,在函数体中并不被使用。(对) (4)重载运算符需要的参数个数与操作数一样多。(错) 四、简答题 1、比较两种运算符重载形式。 在许多情况下,用友元函数还是成员函数重载运算符在功能上没有什么区别;有时将二元运算符重载为友元函数比重载为成员函数使用起来方便 。当然,重载为友元函数也有一些限制。第一,为保持与C++中规定的赋值语义相一致,虽然赋值运算符是个二元操作符,但不能重载为友元函数。同样

第六章 课后习题

匿名 (未验证) 提交于 2019-12-03 00:32:02
一、填空题 (1)运算符的重载实际上是 的重载。 (2)运算符函数必须被重载为 ,或被重载为 。 (3)成员函数重载运算符需要的参数的个数总比它的操作数 一个。 (4)重载赋值运算符时,通常返回调用该运算符的 ,这样赋值就能进行连续赋值操作。 个形参,且规定其参数的类型 整 。 (6)重载调用运算符函数可以带有 个参数。 二、选择题 (1)下列运算符中,不能被重载的是(B)。 (2)下列描述重载运算符的规则中,不正确的是(C)。 (3)下列运算符中,不能有友元函数重载的是(A) (4)下列描述中,不正确的是(C)。 三、判断题 (1)下标运算符的重载提供了在C++中实现安全的数组下标的一种方法。(对) (2)对下标运算符“[ ]”,即可重载为类成员函数,又可重载为友元函数。(错) (3)重载后缀“++”运算符时多给出的一个int参数,在函数体中并不被使用。(对) (4)重载运算符需要的参数个数与操作数一样多。(错) 四、简答题 (1)比较两种运算符重载形式。 答:在许多情况下,用友元函数还是成员函数重载运算符在功能上没有什么区别;有时将二元运算符重载为友元函数比重载为成员函数使用起来方便 。当然,重载为友元函数也有一些限制。第一,为保持与C++中规定的赋值语义相一致,虽然赋值运算符是个二元操作符,但不能重载为友元函数。同样,也应将“+=”、“-=”等赋值运算符重载为成员函数。第二

实验4 静态成员与友元(P281)

匿名 (未验证) 提交于 2019-12-03 00:30:01
实验目的和要求 了解成员函数的特性,掌握静态成员、友元等概念。 实验内容 1. 调试下列程序,写出输出结果,并分析输出结果。 [cpp] view plain copy using namespace class public int static void private int static int void "A=" "B=" int int return } 输出结果如下图所示: 分析:非静态数据成员从属于某个类,而静态数据成员从属于整个类。执行语句1时调用构造函数,使得对象P、Q的数据成员A的值分别是6和8,因此fun ()中输出数据成员A的值分别是6和8。数据成员B的初始值为100,执行语句1,创建对象P,B的值改变为94,再创建对象Q时,B的值改变为86,因此fun()中输出的数据成员B的值都是86,所以输出结果为A=6 B=86 A=8 B=86。 2. 分析并调试程序,完成下列问题。 (1)指出所有的构造函数,它们在本程序中分别起什么作用? (2)指出设置默认参数的构造函数。 (3)指出友元函数,将友元函数放在私有部分,观察结果是否有变化。 dist() 放到私有部分,编译程序发现结果仍然是正确的。这是因为友元函数是一个在类里声明的普通函数, 声明位置 可在类的任何部位,即可在public区也可在private区和protected区,意义完全一样

C++-面向对象(九)

北城余情 提交于 2019-12-02 11:31:36
友元 友元包括友元函数和友元类 如果将函数A(非成员函数)声明为类C的友元函数,那么函数A就能直接访问类C对象的所有成员 如果将类A声明为类C的友元类,那么类A的所有成员函数都能直接访问类C对象的所有成员 友元破坏了面向对象的封装性,但在某些频繁访问成员变量的地方可以提高性能 # include <iostream> using namespace std ; class Point { // friend Point add(const Point &, const Point &); friend class Math ; private : int m_x ; int m_y ; public : int getX ( ) const { return this - > m_x ; } ; int getY ( ) const { return this - > m_y ; } ; Point ( int x , int y ) : m_x ( x ) , m_y ( y ) { } } ; class Math { public : Point add ( const Point & point1 , const Point & point2 ) { return Point ( point1 . m_x + point2 . m_x , point1 . m_y +

C++中的继承

前提是你 提交于 2019-12-01 07:22:42
继承:龙生龙,凤生凤,老鼠儿子会打洞。 sizeof可以验证继承了基类中的所有成员变量 public 的继承方式,结合子类对象对基类成员函数的调用,可以得到子类对基类的成员函数继承(所有资源都被继承。基类中public成员在子类中权限也是public。) #include<iostream> using namespace std; class Base { //父类 public: void Set(int pri,int pro,int pub) { _pri = pri; _pro = pro; _pub = pub; } void Print() { cout << _pri << " " << _pro << " " << _pub << endl; } int _pub; protected: int _pro; private: int _pri; }; class Son1 : Base //子类 //无继承方式 { }; class Son2 : public Base //子类 //public继承方式 { public: void Set(int pri, int pro, int pub) { _pri = pri; //这句报错:在子类中访问私有的成员变量不可以访问。 _pro = pro; //保护可以访问 _pub = pub; } }; int

C++第三次作业

巧了我就是萌 提交于 2019-11-30 15:50:01
C++第三次作业 友元函数,上课老师提出一个问题如何求两点之间的距离。利用面向对象的编程思想,那么首先得定义一个类来描述点。 class Point { public: Point(int x = 0, int y = 0) :x(x), y(y) {//构造函数 count++; }; Point(Point &p) { x = p.x; y = p.y; count++; } ~Point(){count--;} int GetX() { return x; } int GetY() { return y; } static void showCount(); private: int x, y; static int count; }; 接着来写一个类Line来操作点求距离: class Line { public: void myPoint(Point X, Point Y) { this->X = X; this->Y= Y; } //没有使用构造函数使用了赋值的方法给Line数据 double XGet(Point X, Point Y) { return (X.GetX() - Y.GetX())*(X.GetX() - Y.GetX()); } double YGet(Point X, Point Y) { return (X.GetY() - Y.GetY())*

嵌入式C++测试题

早过忘川 提交于 2019-11-30 10:30:18
仅供学习,为嵌入式帝国做亿分之一的贡献吧,临近国庆,祝大家国庆节快乐哦 答案仅供参考吧 一、 选择题(共 80 分, 每题 2 分 ) ( 1 ) A ( 2 ) C ( 3 ) C ( 4 ) B ( 5 ) D ( 6 ) C ( 7 ) C ( 8 ) D ( 9 ) A ( 10 ) C ( 11 ) A (12) B (13) D (14) B (15) A ( 16 ) A ( 17 ) C ( 18 ) D ( 19 ) D ( 20 ) C ( 21 ) C ( 22 ) D ( 23 ) D ( 24 ) D ( 25 ) A ( 26 ) C (27) C (28) C (29) B (30) B ( 31 ) A ( 32 ) D ( 33 ) D ( 34 ) B ( 35 ) A ( 36 ) A ( 37 ) B ( 38 ) B ( 39 ) C ( 40 ) C 二、 填空题(每空 1 分, 共 20 分) 1. 构造函数 2. friend 保护和私有成员 3. 先基类在派生类 4. 单一继承 5. virtual 6. 静态多态性 动态多态性 7. 抽象类 8. 测试是否文件尾 9. 成员函数 10. try throw catch 11. 代码复用和泛型程序设计 12. 类的友元函数 13. 抛出异常 捕捉异常 14. template 15.

C++:友元

不打扰是莪最后的温柔 提交于 2019-11-30 06:28:24
普通友元函数 仅是在类里friend了一个外部函数,并在外部定义了它 友元类 在class a1里声明了友元类(friend class a2)不需要再#include“a2.h”, 在class a2里要调用class a1的成员,需要进行#include“a1” 注:不能对两个类所在的头文件相互调用 类的友元成员函数(比较复杂) 先将会被声明为友元的类class a2进行编写,对它的内部函数(会被声明为类的友元成员函数)进行声明,不定义, 注意需要对class a1;进行声明 可能会在该内部 函数声明 中使用 将class a1进行编写,因为要声明类的友元成员函数,需要#include"a2" 在类里 friend class::func(); 由于不能相互调用,所以在class a2.cpp中进行#include"a1.h", 在对各个a2类中的成员函数进行定义 详情点击这里 补充: 若是本身想调用自己的友元函数,一定要记住友元函数的声明只是一个赋予权限的过程,并非真正的声明 所以想在本身中调用,必须先真正声明该友元 来源: https://www.cnblogs.com/Liberavi/p/11568484.html

c++成员运算符重载和友元运算符重载的比较(以++,--运算符为例)

て烟熏妆下的殇ゞ 提交于 2019-11-28 20:41:14
1、对双目运算符而言,成员运算符重载函数参数列表中含有一个参数,而友元运算符重载函数参数列表含有两个参数;对单目运算符而言,成员运算符重载函数参数列表中没有参数,而友元运算符重载函数参数列表含有一个参数。 2、双目运算符一班可以被重载为友元运算符和成员函数运算符,但是当一个整数与一个复数相加时,必须使用友元函数。 例:友元运算符重载函数实现一个复数与一个整数相加 #include<iostream> using namespace std; class complex { public: complex(int r=0,int i=0); friend complex operator+(complex com,int a)//定义友元运算符重载函数,+左侧是类对象,右侧是函数 { return complex(com.real+a,com.imag); } friend complex operator+(int a,complex com)//定义友元运算符重载函数,+左侧是函数,右侧是类对象 { return complex(a+com.real,com.imag); } void show(); private: int real,imag; }; void complex::show() { cout<<"real="<<real<<" imag="<<imag<

类:友元函数

三世轮回 提交于 2019-11-28 16:21:52
一、友元函数 1、友元函数 友元函数 不是当前类的成员函数 ,但它可以访问该类所有的成员,包括私有成员、保护成员和公有成员。 在类中声明友元函数时,需在其函数名前加上关键字 friend。 友元函数既 可以是非成员函数 , 也可以是另一个类的成员函数 。 class Date { public: Date(int y, int m, int d); //构造函数 friend void showDate1(Date &d); //友元函数 private: int year; int month; int day; friend void showDate2(Date &d); //友元函数 }; Date::Date(int y, int m, int d) { year = y; month = m; day = d; } void showDate1(Date &d) { cout << d.year << "." << d.month << "." << d.day << endl; } void showDate2(Date &d) { cout << d.year << "." << d.month << "." << d.day << endl; } int main() { Date date1(2009, 11, 14); showDate1(date1);