博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Rectangle】C++引用问题
阅读量:6038 次
发布时间:2019-06-20

本文共 1423 字,大约阅读时间需要 4 分钟。

今天偶然写两个灰常简单的类,Point,Rectangle,即左上角和右下角标识一个矩形的类。

#include <iostream>

class Point{
public:
Point();
Point(int x);
Point(int x,int y);
int getX();
int getY();
void setX(int new_val);
void setY(int new_val);
void printPoint();
private:
int x;
int y;
};
Point::Point(int x):x(x),y(x){};
Point::Point():x(0),y(0){};
Point::Point(int x,int y):x(x),y(y)
{
};
int Point::getX(){
return x;
}
int Point::getY(){
return y;
}
void Point::setX(int new_val){
x = new_val;
}
void Point::setY(int new_val){
y = new_val;
}
void Point::printPoint(){
std::cout<<"X:"<<x<<",Y:"<<y<<std::endl;
}

int abss(int x,int y){

if(x-y>0){
return x-y;
}else{
return y-x;
}
}

class Rectangle{
public:
Rectangle(Point &lf,Point &rd);
int Calmian();
int Calzhou();
Point &getlu();
private:
Point leftup;
Point rightdown;
};
Point &Rectangle::getlu(){
return leftup;
}
Rectangle::Rectangle(Point &lf,Point &rd):leftup(lf),rightdown(rd){};
int Rectangle::Calmian(){
int x1,x2,y1,y2;
x1 = leftup.getX();
y1 = leftup.getY();
x2 = rightdown.getX();
y2 = rightdown.getY();
return (abss(x1,x2))*(abss(y1,y2));
}
int Rectangle::Calzhou(){
int x1,x2,y1,y2;
x1 = leftup.getX();
y1 = leftup.getY();
x2 = rightdown.getX();
y2 = rightdown.getY();
return 2*(abss(x1,x2)+abss(y1,y2));
}

 

 

 

标红部分一开始没有使用引用,导致test.getlu().setX(9);  该点并未有任何改变,即以by-value的传递方式,getlu()的只是矩形左上点的一个““副本””,并没有真正改变它。

  这个概念上一直记得,写的时候却不记得了,Mark下下。。。

转载于:https://www.cnblogs.com/programmersong/p/3480965.html

你可能感兴趣的文章
树形DP 复习
查看>>
Vuex随笔
查看>>
crontab 不执行
查看>>
避免用for循环写数据
查看>>
Dijkstra(变形) POJ 1797 Heavy Transportation
查看>>
关于Webpack详述系列文章 (第三篇)
查看>>
关于Webpack详述系列文章 (第四篇)
查看>>
分布式系统的面试题15
查看>>
个人代码库の创建快捷方式
查看>>
由strcat函数引发的C语言中数组和指针问题的思考
查看>>
无锁编程
查看>>
如何在loadrunner中做关联
查看>>
二叉树的六种遍历方法汇总(转)
查看>>
用wxpython制作可以用于 特征筛选gui程序
查看>>
【转载】 [你必须知道的.NET]目录导航
查看>>
数据存储小例
查看>>
Spring Boot 配置优先级顺序
查看>>
php 信号量
查看>>
C++中构造函数详解
查看>>
数据库课程实习设计——酒店房间预订管理系统
查看>>