2016年6月17日学习日记c++第三讲

2016年6月17日学习日记c++第三讲
1、c变量:被修饰的变量不能改变
2、c指针:
指针常量:指针指向不能变,指向变量的值可以改变char*const p;
常量指针:指针指向可以改变,指向变量的值不能变const char *p
3、C++中const主要存在的三个位置

c++中 const和函数
const int func (const int a) const;
1)const 返回值:修饰返回值时一个常量(只读,不能更改)
2)const 形參:修饰形參a为只读对象
3)函数末尾const:修饰成员函数(函数体内不能修改成员变量的值)
非const成员函数即可以调用非const成员函数也可以调用const成员函数
eg:

Circle c;
c.test1();//const
c.test2()//NaN 非const成员函数

const成员函数只能调用const成员函数
eg:

const Circle c1;
c1.test1();//const
//c1.test2()//NaN   error

const对象引用

Circle cc;
const Circle cc1;

Circle &cm1 = cc;
const Circle &cm2 = cc;
//可以通过cc做修改、但是不能通过cm2做修改
//cm2不能调用非const成员函数,cc可以。

const Circle &cm3 = cc1’
//Circle &cm4 = cc4;//error

const类型的对象只能赋值给const类型的引用,不能复制给非const类型的引用
非const类型的对象既可以赋值给const类型的引用,也可以赋值给非const类型的引用

类和对象的使用:
c++:对象传值,1、值 2、指针 3、引用
void func(Circle c);
void func(Circle *c);
void func(Circle &c);
一般情况下使用传引用(防止创建临时对象),为了防止在函数内修改参数,所以使用常引用 const Circle &c
C++中如果要返回一个对象 以值返回的形式来使用:函数以传值形式返回一个对象,会自动创建一个临时对象来保存
因为函数不能返回一个指向局部变量的指针和引用

浅拷贝(逻辑拷贝):当把一个对象肤质给另一个对象(c1=c2),把c2对象中的每个成员值拷贝一份分别赋值给c1的每一个成员变量,这样构成浅拷贝。
如果成员变量包含指针,因为浅拷贝是把值赋值给另外一个变量,这样使得两个对象的指针指向同一块堆空间(对象消耗释放内存,造成2次删除错误)

课堂练习:
写一个长方形类:length,width

写函数
1、通过3个长方形构造一个大的长方形(返回一个长方形)
2、计算两个长方形的面积和
3、3个长方形,得到面积最大的长方形(返回面积最大的长方形)
Rectangle.hpp

#ifndef Rectangle_hpp
#define Rectangle_hpp

#include <stdio.h>
class Rectangle
{
    float length;
    float width;
public:
    Rectangle();
    Rectangle(float l,float w);
    void print();
    float getLength();
    float getWidth();
    Rectangle bigRectangle(const Rectangle &r1,const Rectangle &r2,const Rectangle &r3);
    float getArea()const;
    Rectangle bigestRectangle(const Rectangle &r1,const Rectangle &r2,const Rectangle &r3);

};
#endif

Rectangle.cpp

#include "Rectangle.hpp"
Rectangle:: Rectangle()
{

}
Rectangle::Rectangle(float l,float w):length(l),width(w)
{

}
void Rectangle::print()
{

}

float Rectangle:: getLength()
{
    return length;
}
float Rectangle:: getWidth()
{
    return width;
}
Rectangle Rectangle::bigRectangle(const Rectangle &r1,const Rectangle &r2,const Rectangle &r3)
{
    length=r1.length+r2.length+r3.length;
    width=r1.width+r2.width+r3.width;
    Rectangle r(length,width);
    return r;
}
float Rectangle:: getArea()const
{
    return length*width;
}
Rectangle Rectangle:: bigestRectangle(const Rectangle &r1,const Rectangle &r2,const Rectangle &r3)
{
    Rectangle r=r1.getArea()>r2.getArea()?(r1.getArea()>r3.getArea()?r1:r3):(r2.getArea()>r3.getArea()?r2:r3);
    length=r.length;
    width=r.width;
    return r;
}

main.cpp

#include "Rectangle.hpp"
using namespace std;
int main(int argc, const char * argv[]) {
    Rectangle r1(1,1),r2(2,2),r3(3,3),r4;
    r4.bigRectangle( r1, r2, r3);
    cout<<r4.getLength()<<","<<r4.getWidth()<<endl;
    r4.bigestRectangle(r1, r2, r3);
    cout<<"length : "<<r4.getLength()<<"area : "<<r4.getArea()<<endl;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值