指针引用动态内存分配拷贝构造函数
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
指针变量的声明
指针也是一种数据类型,具有指针类型的变量称为指针变量。指针变量是用 于存放内存单元地址的。
通过变量名访问变量是直接的,而通过指针访问一个变量是间接的。
int a=5;
pa
a
int*pa=&a;
&a
5
cout<<*pa<<a;
* : 指针运算符,指针所指向的变量的值。 & : 取地址运算符,用来得到所取变量的地址。
p1 addr:0x0012FF78 pref addr:0x0012FF78
x=10 y=10
x=10 y=10
p2 addr:0x0012FF6C pt addr:0x0012FF6C
ห้องสมุดไป่ตู้
void main(){
x=20 y=20 x=20 y=20
Point p1(10,10);
Point &pref=p1; //引用
例:使用指针来访问Point类的成员
#include<iostream> using namespace std; class Point{ public:
Point(int xx,int yy) { x=xx,y=yy;
} int getx(){return x;} int gety(){return y;} private: int x,y; };
void main(){ Point a(4,5); Point *p1; p1=&a; cout<<p1->getx()<<endl; cout<<(*p1).gety()<<endl;
}
引用的概念
2. 引 用
引用是给变量取一个别名,它引入了变量的一个同意词。
格式: type & 含义是“type类型的引用”
cout<<"p1 addr:"<<&p1
<<" pref addr:"<<&pref<<endl;
p1.print(); pref.print();
Point p2(20,20),*pt; pt=&p2; //指针 cout<<"p2 addr:"<<&p2
<<" pt addr:"<<pt<<endl; p2.print(); pt->print(); }
obj.print();
cout<<"&obj="<<&obj<<endl;
f1(obj);
}
引用作为返回值
若一个函数返回了引用,那么该函数的调用也可以被赋值。如:
#include<iostream>
using namespace std;
char s[80]="Hello World"; char &replace(int k){return s[k];} char *rep(int k) {return &s[k];} void main(){
void f1(A &voo){
cout<<"&voo="<<&voo<<endl;
voo.print(); } void main() {
A obj(10);
Constructor called! 10 x=10 &obj=0x0012FF70 &voo=0x0012FF70 x=10 Deconstructor called! 10
类的引用作为传递的参数
#include<iostream>
using namespace std; class A{ private: int x; public:
A(int vx){ cout<<"Constructor called! "<<vx<<endl; x=vx;
} ~A(){cout<<"Deconstructor called! "<<x<<endl;} void print(){cout<<"x="<<x<<endl;} };
1.指针
内存空间的访问方式
计算机的内存储器被划分为一个个的存储单元。存储单元按一定的规则编号, 这个编号就是存储单元的地址。每个字节是一个基本内存单元。
在C++程序中是如何从内存单元中存取数据呢? 1、通过变量名
在变量获得内存空间的同时,变量名成了相应内存空间的名称。 2、通过地址
如果当变量名不够方便或者根本没有变量名可用时,这是就需要直接用地址来 访问内存空间。
replace(11)='!'; cout<<s<<endl; cout<<replace(1)<<endl; *rep(5)='+'; cout<<rep(0)<<endl; cout<<*rep(0)<<endl; cout<<replace(0)<<endl; }
由上图可以看到,指针变量p指向变量a。在理解“指向”的时候,应该了解 它指的是:p中存有a的地址,通过该地址就能找到a。一个变量的指针就是该变 量的地址。存放地址的变量,就是指针变量。
对象指针
对象和基本数据类型一样,在初始化后 都会在内存中有一定的空间。既可 以通过对象名来访问一个对象也可以通过对象地址。
此引用与type类型变量的地址相联系。
如:int i;int &j=i;创建一个整型引用j, j是i的地址的别名。
j和i的地址相同,表示同一个变量。
int i=5;
5i
int &j=i;
5 i, j
i=i+1;//i,j都为6 注意:
6
i, j
▪ 在声明引用时,马上就要对它进行初始化,不能在声明完后重赋值。 故 int i; int &j; j=i; 是错误
cout<<i<<" "<<j<<endl;
}
对类对象定义引用与指针举例
#include<iostream> using namespace std; class Point{ private: int x,y; public:
Point(int vx,int vy){x=vx;y=vy;} void print(){cout<<"x="<<x<<" y="<<y<<endl;} };
格式:类名 *对象指针名;
例: //声明Point类的对象指针变量 p_point Point *p_point; Point p1;//声明point类的对象p1 //将对象p1地址赋给p_point,使p_point指向p1 p_point=&p1;
使用格式: 对象指针名—>成员名 等同于 (*对象指针名).成员名
▪ 引用运算符只在声明时使用,任何其他“&”的使用都是地址操作 符。
#include<iostream>
using namespace std; 0x0012FF7C 0x0012FF7C
void main(){
66
int i; int &j=i;
i=5;
i++;
cout<<&i<<" "<<&j<<endl;