写了个c++类的成员函数,返回引用

问题描述

写了个c++类的成员函数,返回引用
 test & test::count_price(const test &a){
  price+=a.price;
  return *this;
}

原本想写成这样:

  test &c=a.count_price(b);//获取a的引用

结果意外写成:

 test c=a.count_price(b);

编译也能通过,问题就来了,为什么这样做可以呢?引用的实质是什么呢?

解决方案

你不理解的是因为:引用返回后调用拷贝构造函数生成了对象c

另一个就是正常的引用赋值。

解决方案二:

并不是生成了对象C,而是拷贝构造产生的临时对象赋值给了c.

解决方案三:

并不是生成了对象C,而是拷贝构造产生的临时对象赋值给了c.

时间: 2024-08-03 15:24:32

写了个c++类的成员函数,返回引用的相关文章

深入类的成员函数指针

先看这样一段代码   class test { public:      test(int i){ m_i=i;}      test(){};      void hello()     {          printf("hello/n");     } private:     int m_i; }; int main() {  test *p=new test();  p->hello();  p=NULL;  p->hello(); }   结果是: hello

C++类的成员函数(在类外定义成员函数、inline成员函数)

类的成员函数(简称类函数)是函数的一种,它的用法和作用和前面介绍过的函数基本上是一样的,它也有返回值和函数类型,它与一般函数的区别只是:它是属于一个类的成员,出现在类体中.它可以被指定为private(私有的).public (公用的)或protected(受保护的). 在使用类函数时,要注意调用它的权限(它能否被调用)以及它的作用域(函数能使用什么范围中的数据和函数).例如私有的成员函数只能被本类中的其它成员函数所调用,而不能被类外调用.成员函数可以访问本类中任何成员(包括私有的和公用的),可

使非MFC窗口程序的窗口回调过程成为C++类的成员函数

一直以来,编写非MFC下的窗口程序,都习惯把窗口过程及消息处理函数编写成全局函数.为了把窗口回调过程及窗口消息处理函数封装成C++窗口类的成员函数,于是我编写了抽象类CWndProc: 一.头文件 //wndpro.h #ifndef __WNDPROC_H__ #define __WNDPROC_H__ class CWndProc { protected: //保护的构造函数,必须由派生类来构造. CWndProc(); virtual ~CWndProc(); protected: //窗

python中如何对类的成员函数开启线程?

问题描述 python中如何对类的成员函数开启线程? 单独对某个函数开启线程是可以的,比如下面的代码: import threading import thread import time def doWaiting(): print 'start waiting:', time.strftime('%H:%M:%S') time.sleep(3) print 'stop waiting', time.strftime('%H:%M:%S') thread1 = threading.Thread

C++写的一个简单类模版 友元函数求最大最小值

问题描述 C++写的一个简单类模版 友元函数求最大最小值 如题 , 编译时总是说 [Error] ld returned 1 exit status (编译器dev c++) using namespace std; template <typename t> class CValue { t data[5]; public: CValue(); friend t Max(CValue <t> a); friend t Min(CValue <t> a); }; tem

c++-C++自己写的虚基类和同名函数多重继承的小例子出现了继承不明确的问题

问题描述 C++自己写的虚基类和同名函数多重继承的小例子出现了继承不明确的问题 #include using namespace std; class vihicle { public: int i; virtual void run() { cout<<"111"; } }; class bicycle:virtual public vihicle { public: void run() { cout<<"bicycle run"; }

一般函数指针和类的成员函数指针深入解析_C 语言

函数指针是通过指向函数的指针间接调用函数.函数指针可以实现对参数类型.参数顺序.返回值都相同的函数进行封装,是多态的一种实现方式.由于类的非静态成员函数中有一个隐形的this指针,因此,类的成员函数的指针和一般函数的指针的表现形式不一样. 1.指向一般函数的指针函数指针的声明中就包括了函数的参数类型.顺序和返回值,只能把相匹配的函数地址赋值给函数指针.为了封装同类型的函数,可以把函数指针作为通用接口函数的参数,并通过函数指针来间接调用所封装的函数.下面是一个指向函数的指针使用的例子. 复制代码

class-关于类的成员函数问题

问题描述 关于类的成员函数问题 Person::Person(const std::string&ln, const char*fn = "Heyyou") 这是在类申明中的一个成员函数声明,为什么在在定义这个函数的时候会重定义?该怎么解决? 解决方案 重定义要么是同样的函数重载参数形式的函数定义了好几个,要么虽然你没有这么做,但是你重复用include包含了定义函数的源代码. 解决方案二: 类的成员函数类模板成员函数的调用问题c++ 类中的成员函数在内存空间的分配问题

c++-C++的类的成员函数问题为什么re()不能进行初始化?而setpoint()函数可以?

问题描述 C++的类的成员函数问题为什么re()不能进行初始化?而setpoint()函数可以? 如题,我知道第一个rectangle是构造函数,所以要与类同名,然后可以初始化赋值,为什么另一个程序setpoint明明不是构造函数,但是可以做赋值处理,然后程序不会报错呢?我把rectangle类里的rectangle函数改成re却是会报错,不用说void re,我试过了,还是会报错.第四张图我直接把构造函数删除掉了,程序正常运行,但是我不懂为什么re不管怎么改都会报错,请各位大神为我解答.谢谢