鱼C论坛

 找回密码
 立即注册
查看: 3753|回复: 5

[已解决]一个类的名称是一个指针吗??

[复制链接]
发表于 2019-6-17 09:52:59 | 显示全部楼层 |阅读模式
5鱼币
比如这里有一个类
  1. class Complex
  2. {
  3. public:
  4.     Complex();
  5.     Complex(double r, double i);
  6.     Complex complex_add(Complex &d);
  7.     void print();

  8. private:
  9.     double real;
  10.     double imag;
  11. };
  12. Complex::Complex()
  13. {   
  14.     real = 0;
  15.     imag = 0;
  16. }

  17. Complex::Complex(double r, double i)
  18. {
  19.     real = r;
  20.     imag = i;
  21. }

  22. Complex Complex::complex_add(Complex &d) //输入的是地址,说明类的名称是地址
  23. {
  24.     Complex c;

  25.     c.real = real + d.real;   //指针的话不应该是d->real吗??
  26.     c.imag = imag + d.imag;//d->imag

  27.     return c;
  28. }
  29. void Complex::print()
  30. {
  31.     std::cout << "(" << real << ", " << imag << "i)\n";
  32. }

  33. int main()
  34. {
  35.     Complex c1(3, 4), c2(5, -10), c3;  //新建一个类

  36.     c3 = c1.complex_add(c2);

  37.     std::cout << "c1 = ";
  38.     c1.print();
  39.     std::cout << "c2 = ";
  40.     c2.print();
  41.     std::cout << "c1 + c2 = ";
  42.     c3.print();

  43.     return 0;
  44. }
复制代码

主要是这个函数的问题
Complex Complex::complex_add(Complex &d) //输入的是地址,说明类的名称是地址
{
    Complex c;

    c.real = real + d.real;   //指针的话不应该是d->real吗??
    c.imag = imag + d.imag;//d->imag

    return c;
}
之前有碰到过
complex *p = c1;
p->Complex complex_add();

搞的我好混乱呀,这个语法
最佳答案
2019-6-17 09:53:00
本帖最后由 风扫地 于 2019-6-17 16:49 编辑

另外:
类名
对象名
你好像区分得不太清楚。。

  Complex c;

Complex 是class_name
c 是object_name

Complex & d = c;

Complex 是class_name
c 是object_name
d 表示是c对象的一个引用,也就是别名的意思,同一个对象的别名,在传引用的作为函数参数的情况下,你也可以认为是一个指向原对象的指针,实际上在底层也会退化成原对象指针,但在C++语法的使用中传入时不需要取地址,使用时不需用 ->,编译器会处理这些问题。

最佳答案

查看完整内容

另外: 类名 对象名 你好像区分得不太清楚。。 Complex c; Complex 是class_name c 是object_name Complex & d = c; Complex 是class_name c 是object_name d 表示是c对象的一个引用,也就是别名的意思,同一个对象的别名,在传引用的作为函数参数的情况下,你也可以认为是一个指向原对象的指针,实际上在底层也会退化成原对象指针,但在C++语法的使用中传入时不需要取地址,使用时不需用 ->,编译器会处理这 ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-6-17 09:53:00 | 显示全部楼层    本楼为最佳答案   
本帖最后由 风扫地 于 2019-6-17 16:49 编辑

另外:
类名
对象名
你好像区分得不太清楚。。

  Complex c;

Complex 是class_name
c 是object_name

Complex & d = c;

Complex 是class_name
c 是object_name
d 表示是c对象的一个引用,也就是别名的意思,同一个对象的别名,在传引用的作为函数参数的情况下,你也可以认为是一个指向原对象的指针,实际上在底层也会退化成原对象指针,但在C++语法的使用中传入时不需要取地址,使用时不需用 ->,编译器会处理这些问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-6-17 11:03:38 | 显示全部楼层
这个叫传引用。在搜索引擎内搜索关键字 "C++ 传引用"
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-6-18 12:13:41 | 显示全部楼层
风扫地 发表于 2019-6-17 09:53
另外:
类名
对象名

直接打印对象名,就是一个指针,和类里面打印this指针相等。
之前不是说过指针都是 p-> ,来引用里面的变量或者函数吗,或者(*p).
这样就搞的我很混乱。。。。。
总之编译器会处理的吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-6-18 13:51:33 | 显示全部楼层
方大侠 发表于 2019-6-18 12:13
直接打印对象名,就是一个指针,和类里面打印this指针相等。
之前不是说过指针都是 p-> ,来引用里面的 ...

指针和引用还是有区别的,引用是别名啊,借助搜素引擎再理解下。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-6-18 15:22:33 | 显示全部楼层
风扫地 发表于 2019-6-18 13:51
指针和引用还是有区别的,引用是别名啊,借助搜素引擎再理解下。

引用我知道,我的意思是直接打印对象的名称就是一个指针呀。。。
一般涉及一个对象内部的变量或者函数,也是靠这个对象的名称(指针)来寻找的,
但是对象是用.  
指针是用->
想了一下应该是后来扩展用的指针->,同时保留了之前的 . 的操作吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-12 19:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表