文章标题const/ this 指针/析构函数/浅拷贝
来源:互联网 发布:淘宝网怎么找店主 编辑:程序博客网 时间:2024/06/05 21:50
类和对象(三)
类和对象。const this 指针
复习
函数重载:命名一样,参数的类型或者个数不同
初始化列表:初始化属性,比函数体内赋值形式效率高
*初始化类列表形式:1.const成员变量2.引用类型成员变量3.组合类(一个类的成员变量是另一个类的对象)4.继承
组合类(复合类)*
class p{组合:主要构造函数
public:
p();
p(int x,int y,intrados);
private:
point a;//组合类
int m;
}
p::p(int x,int y,int r):a(x,y),radius(r){}
析构函数:当生命周期结束时,释放空间(回收空间)(构造函数成员变量指针指向堆的空间)
对象销毁时,自动释放空间(如果成员变量没有指针,不需要写析构函数,如果成员变量包含指针,那么指针空间一定分配在堆上,析构函数)
new:在堆上开辟空间
类和对象、const、this 指针
const
//c中的常量// const int num1=10;//只能读,不能写// int num2=num1+10;//num1=20;//error// // //C中指针 指针常量 常量指针、// //指针常量:指针的值不能发生改变。。// //常量指针:指针的值可以改变。。// int num3=10;// const int *p1=&num3;//常量// int const *p=&num3;// int *const p2=&num3;//指针
//C++中const和函数 //const int func(const int a)const;(三个位置) //返回值const:修饰返回值,只读,不能写 //int num=func(); //func().print//error /***形参const:修饰形参a为read_only 函数末尾const:修饰成员变量(函数体内不能修改成员变量的值) const 成员函数只能调用const 成员函数,不能调用非const 成员函数 非const成员函数,可以调用const 成员函数。也可以调用const成员函数。*/** Text t; const Text t1; const Text &cm1=t ; Text &cm2=t; //可以通过t做修改,但是不能通过cm2做修改 //cm2不能调用const的函数。但t可以 const Text &cm3=t1; //Text &cm4=t1;//error **//const 对象引用 //const 类型对象可以赋值给const类型引用 ,不能赋值给非const类型引用 //非const类型对象即可以赋值给const类型引用,也可以赋值给非const类型引用**
#include <iostream>using namespace std;#include "text.hpp"#include "Rectangle.hpp"void func(const Text &t ){ cout<<t.getx()<<endl;//常量引用,常引用(const)对象只能调用const类型成员函数}//特别注意:返回值Text,不是Text*,Text&Text middle(const Text t1,const Text t2){ int x1=t1.getx(); int x2=t2.getx(); int y1=t1.gety(); int y2=t2.gety(); int x=(x1+x2)/2; int y=(y1+y2)/2; Text t(x,y); return t;//当返回局部对象,一定要以返回值的形式}//Rectangle:: Rectangle(){}//Rectangle:: Rectangle(int l,int w){// length=l;// width=w;//}//void Rectangle:: print(){ // cout<<length<<","<<width<<endl;//}//int Rectangle::addRectangle(const Rectangle &t1){// int x1=t1.length;// int y1=t1.width;// int x2=this->length;// int y2=this->width;// int x=x1+x2;// int y=y1+y2;// return x*y;//}//int Rectangle:: rectangleArea()const{// return length*width;//}//Rectangle Rectangle:: bigRectangle(const Rectangle &r1,const Rectangle &r2,const Rectangle &r3){// int l=r1.length+r2.length+r3.length;// int w=r1.width+r2.width+r3.width;// Rectangle r(l,w);// return r;//}//Rectangle Rectangle:: maxRectangle(const Rectangle &r1,const Rectangle &r2,const Rectangle &r3){// Rectangle r;// if(r1.rectangleArea()>r2.rectangleArea()){// if(r3.rectangleArea()>r1.rectangleArea()){// r=r3;// }// else// r=r1;// }// else// {// if(r3.rectangleArea()>r2.rectangleArea())// r=r3;// else// r=r2;// }// return r;//}int main(int argc, const char * argv[]) { /*C++:对象传值1.值2.指针3.引用 void func(Text t) viod func(Text *t) void func(Text &t) 一般情况下使用传引用(防止创建临时对象),为了防止函数内修改参数,所有使用常引用const Text &t函数以传值形式返回一个对象,会自动创建一个临时对象来保存 函数不能返回一个指向局部变量的指针或引用 */ const Text t1(3,4); const Text t2(6,8); Text t3 = middle(t1,t2); t3.print(); /* 逻辑拷贝(浅拷贝) 当把一个对象赋值给另一个对象(t1=t2),把t2的成员变量拷贝一份分别赋值给c1的每个成员变量,这样构成浅拷贝 如果成员变量包括指针,因为浅拷贝是把值赋值给另一个变量,这样使得两个对象的指针指向同一块堆空间(对象消耗释放内存,造成2次删除错误) */ Text t4(3,6); Text t5(90,40); t4=t5; t4.print(); /* 写一个长方形的类:length,width 写函数 1.通过3个长方形构造一个发的长方形(返回一个长方形) 2.计算两个长方形的面积和 3.三个长方形,得到面积最大的长方形(返回面积最大的长方形) */ Rectangle r1(3,4); Rectangle r2(10,20); Rectangle r3(90,50); Rectangle r; Rectangle c; c=r.bigRectangle(r1,r2,r3); c.print(); c=r.maxRectangle(r1, r2,r3); c.print(); int n=r2.addRectangle(r1); cout<<"两个长方形的面积和:"<<n<<endl; return 0;}结果:4,690,40103,7490,50两个长方形的面积和:312
0 0
- 文章标题const/ this 指针/析构函数/浅拷贝
- Day40、this指针和常函数、析构函数、对象的创建和销毁过程、拷贝构造和拷贝赋值(深拷贝、浅拷贝!)
- day05 this指针和常函数、析构函数(Destructor) 、拷贝构造和拷贝赋值
- this指针?const函数?const对象成员?
- C++文件头,命名空间,new和delete,内联函数,引用,函数重载,构造函数和析构函数,深拷贝和浅拷贝,explict,this指针
- this指针、构造函数、拷贝构造函数、析构函数的总结
- this指针及const成员函数
- 类 this指针 const成员函数
- C++ this指针与const成员函数
- C++(typedef、一维数组转成二维数组、C和C++区别、成员地址成员指针、构造析构函数、this指针、const用法、显示时间、const用法)
- this指针之const
- C++之this指针和const对象/成员函数
- C++学习笔记(六)-- 类和对象 构造函数和析构函数 const成员函数 this指针 对象数组 堆栈管理变量
- 对象和类,公有类和私有类,构造函数和析构函数,const成员函数,this指针,对象数组,类作用域,抽象数据
- This 指针和const 修饰This指针
- 文章标题 C++成员变量以及成员函数指针
- 文章标题 C与C++的函数指针
- 拷贝对象资源,this指针
- git 常用命令
- 使用 数组(array)资源文件
- [LeetCode]problem 61. Rotate List
- SharePoint 快速配置系统默认控件: "任务"的邮件通知
- 默认自动提取第一张图片为标题图片 在哪里修改程序
- 文章标题const/ this 指针/析构函数/浅拷贝
- Javascript中函数相关知识点3(面试必备)
- ECAT_Main()状态机处理
- opencv的sort、sortIdx函数
- Hadoop安装教程及单机/伪分布式配置
- Objective-C中block用法
- SAP调用WSDL报错,求解!
- 编写高效jQuery代码
- VMware 下USB 识别问题的解决办法!!!