📄 ep4_7.cpp
字号:
/* 4.7 对上面4道题中的类对象的数据,由友元函数来进行访问。并对比友元函数、
成员函数和普通函数使用上的不同。*/
//仅以4.4为例
#include <iostream>
#include <cmath>
using namespace std;
class Rectangle {
double left, top ;
double right, bottom;
public:
Rectangle(double l=0, double t=0, double r=0, double b=0);
~ Rectangle(){}; //析构函数,在此函数体为空
void Assign(double l,double t,double r,double b);
double getLeft(){ return left;} // 以下四个函数皆为内联成员函数
double getRight(){ return right;}
double getTop(){return top;}
double getBottom(){return bottom;}
void Show();
friend void showprint(Rectangle);
double Area();
double Perimeter();
};
// 构造函数,带缺省参数,缺省值为全0,在声明中指定
Rectangle::Rectangle(double l , double t, double r, double b) {
left = l; top = t;
right = r; bottom = b;
}
void Rectangle::Assign(double l, double t, double r, double b){//赋值
left = l; top = t;
right = r; bottom = b;
}
double Rectangle::Area(){
return fabs((right-left)*(top-bottom));
}
double Rectangle::Perimeter(){
return 2*(fabs(right-left)+fabs(top-bottom));
}
void Rectangle::Show(){//成员函数
cout<<"left-top point is ("<<left<<","<<top<<")"<<'\n';
cout<<"right-bottom point is ("<<right<<","<<bottom<<")"<<'\n';
}
void showprint(Rectangle rt){//友元函数,要加类名,但直接调用私有数据成员
cout<<"left-top point is ("<<rt.left<<","<<rt.top<<")"<<'\n';
cout<<"right-bottom point is ("<<rt.right<<","<<rt.bottom<<")"<<'\n';
}
void print(Rectangle rt){//普通函数,要用接口函数间接调用私有数据成员
cout<<"left-top point is ("<<rt.getLeft()<<","<<rt.getTop()<<")"<<'\n';
cout<<"right-bottom point is ("<<rt.getRight()<<","<<rt.getBottom()<<")"<<'\n';
}
int main(){
Rectangle rect;
rect.Show();
rect.Assign(100,400,300,200);
rect.Show();
Rectangle rect1(0,200,200,0);
rect1.Show();
Rectangle rect2(rect1);
rect2.Show();
print(rect);
showprint(rect);
cout<<"面积"<<rect.Area()<<'\t'<<"周长"<<rect.Perimeter()<<endl;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -