鱼C论坛

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

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

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

private:
    double real;
    double imag;
};
Complex::Complex()
{   
    real = 0;
    imag = 0;
}

Complex::Complex(double r, double i)
{
    real = r;
    imag = i;
}

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

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

    return c;
}
void Complex::print()
{
    std::cout << "(" << real << ", " << imag << "i)\n";
}

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

    c3 = c1.complex_add(c2);

    std::cout << "c1 = ";
    c1.print();
    std::cout << "c2 = ";
    c2.print();
    std::cout << "c1 + c2 = ";
    c3.print();

    return 0;
}
主要是这个函数的问题
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++语法的使用中传入时不需要取地址,使用时不需用 ->,编译器会处理这 ...
想知道小甲鱼最近在做啥?请访问 -> 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++语法的使用中传入时不需要取地址,使用时不需用 ->,编译器会处理这些问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-6-17 11:03:38 | 显示全部楼层
这个叫传引用。在搜索引擎内搜索关键字 "C++ 传引用"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

使用道具 举报

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

指针和引用还是有区别的,引用是别名啊,借助搜素引擎再理解下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-3 21:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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