C++返回对象和返回引用
引用的本质是对裸露的地址的二次包装,它实际返回的还是一个变量或对象的地址,因此如果返回引用不可以返回局部变量的,因为函数在返回之后,该变量就销毁。下面是其C++返回对象和返回引用,一起来学习下吧:
代码是对运算符*进行重载,返回引用和返回对象有不同的结果。
[cpp] view plain copy#include
using namespace std;
class A
{
public:
A() { cout << "A::A()" << endl;}//A构造函数
A(A& another){cout << "A(A& another)" << endl;}
~A(){ cout << "~A::A()" << endl;}//A析构函数
void func(){ cout << "class A::void func()" << endl;}
};
class B
{
public:
B(A* p) :_p(p){cout << "B::B()" << endl;}//B构造函数
~B(){ cout << "~B::B()" << endl; }//B析构函数
A operator*(){ //运算符重载*
return *_p;
}
private:
A* _p;
};
int main(){
A p1;
B p2(&p1);
(*p2)();
return 0;
}
中,返回的是A类的对象,之后会调用A中的拷贝构造器
A(A& another);
即用*_p的'值作为参数,在内存中构造一个新的对象,但它没有名字,是无名对象,之后运行该无名对象中的func()函数,运行完后,这个一次性的无名对象就会销毁,即调用析构函数。
同时,返回对象的话也不能在后续对它进行左值运算,编译器通不过而且也毫无意义,因为之后程序员是没法访问到这个无名变量的
仅此个人观点,有问题欢迎指正。
-
直接插入排序(C语言实现)
直接插入排序方法:仅有一个记录的表总是有序的,因此,对于有n个记录的表,可以从第二个记录开始直到第n个记录逐个有序的向有序表中进行插入操作,从而得到n个记录按关键字有序的表。下面一起跟着小编学习一下吧!实现一个直接插入排序的`C语言函数,要求对要排序的元素按...
-
C语言输出菱形的方法
题目:输出行列都相等的菱形,如5行5列:行列123451*2***3*****4***5*分析:当行数等于总行数的一半时,*是递增的,递增为2。当行数大于总行数的一半时,*是递减的,递增为2。设有一个行列为n的菱形,我们用变量i作为行数,以0开始,ik作为n菱第i行要输出的*个数。则i<=n的中值(用m...
-
2017计算机二级C语言精选习题
多做题有助于同学们及时检测自己的学习情况。希望提供的2017计算机二级C语言精选习题,能够帮助大家巩固所学知识,为今后的学习打好基础!(1)OSI模型的'物理层负责下列哪一种功能?A)格式化报文B)为数据选择通过网络的路由C)定义连接到介质的特征D)提供远程文件访...
-
2017年计算机二级C语言的应用
yjbys考试网为您整理了2017年计算机二级C语言的应用,更多计算机等级考试相关信息请访问应届毕业生计算机等级考试网。从前面对C语言的特点的分析中,不难看出C语言具有编程方便、语句简练、功能很强、移植性好等优点,是编程者喜欢使用的一种结构化程序设计语言。C...