学习日志(二十)

面向对象练习的错题&&友元函数

KiKi理解了继承可以让代码重用,他现在定义一个基类shape,私有数据为坐标点x,y, 由它派生Rectangle类和Circle类,它们都有成员函数GetArea()求面积。派生类Rectangle类有数据:矩形的长和宽;派生类Circle类有数据:圆的半径。Rectangle类又派生正方形Square类,定义各类并测试。输入三组数据,分别是矩形的长和宽、圆的半径、正方形的边长,输出三组数据,分别是矩形、圆、正方形的面积。圆周率按3.14计算。

输入描述:

输入三行,

第一行为矩形的长和宽,

第二行为圆的半径,

第三行为正方形的边长。

输出描述:

三行,分别是矩形、圆、正方形的面积。

#include <iostream>

using namespace std;

class Shape{

private:

double x;

double y;

public:

Shape(double x1=0,double y1=0) : x(x1),y(y1) {}

};

class Rectangle:public Shape {

protected:

double length;

double width;

public:

Rectangle(double x1=0,double y1=0,double l=0,double w=0):Shape(x1,y1),length(l),width(w) {}

double Getarea() {return length*width;}

};

class Circle : public Shape {

protected:

double radius;

public:

Circle(double x1=0,double y1=0,double r=0):Shape(x1,y1),radius(r){}

double Getarea() {return 3.14*radius*radius;}

};

class Square:public Rectangle {

protected:

double bianchang;

public:

Square(double side) : Rectangle(side, side) {}

void set(double a){

bianchang=a; 一定不要写成a=bianchang

}

double Getarea() {return bianchang*bianchang;}

};

int main() {

double l,w;

std::cin>>l>>w;

Rectangle rect(0,0,l,w);

double r;

std::cin>>r;

Circle circle(0,0,r);

double side;

std::cin>>side;

Square square(side);

square .set(side); side的值确定后,a的值确定,从而确定bianchang ;注意加.

std::cout<<rect.Getarea()<<std::endl;

std::cout<<circle.Getarea()<<std::endl;

std::cout<<square.Getarea()<<std::endl;

return 0;

} 注意所有数据类型 double

友元函数

C++中,友元是一种特殊的机制,它可以一个类或函数访问另一个类的私有成员。这在一定程度上打破了封装性,但有时候为了实现某些功能,友元是必要的。

友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字 friend。

例:#include<iostream>

using namespace std;

//先定义一个类

class MyClass

{

private:

int age;

public:

//用来改变age

void setage(int i);

//友元函数,参数是MyClass对象

friend void myFun(MyClass obj);

};

//成员函数,要加::

void MyClass::setage(int i)

}

age=i;

//正常的普通函数而已

}

void myFun(MyClass obj)

{

cout<<obj.age<<endl;

obj.age=998;

cout<<obj.age<<endl;

}

int main()

{

MyClass f1;

myFun(f1);

f1.setage(1000);

return 0;

}

全部评论

相关推荐

2024-12-18 12:05
华东师范大学 golang
点赞 评论 收藏
分享
2024-12-23 06:50
东北大学 Java
给点吧求求了:3点发的帖子,害怕😰
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务