方大侠 发表于 2019-6-17 09:52:59

一个类的名称是一个指针吗??

比如这里有一个类
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++语法的使用中传入时不需要取地址,使用时不需用 ->,编译器会处理这些问题。

风扫地 发表于 2019-6-17 11:03:38

这个叫传引用。在搜索引擎内搜索关键字 "C++ 传引用"

方大侠 发表于 2019-6-18 12:13:41

风扫地 发表于 2019-6-17 09:53
另外:
类名
对象名


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

风扫地 发表于 2019-6-18 13:51:33

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

指针和引用还是有区别的,引用是别名啊,借助搜素引擎再理解下。

方大侠 发表于 2019-6-18 15:22:33

风扫地 发表于 2019-6-18 13:51
指针和引用还是有区别的,引用是别名啊,借助搜素引擎再理解下。

引用我知道,我的意思是直接打印对象的名称就是一个指针呀。。。
一般涉及一个对象内部的变量或者函数,也是靠这个对象的名称(指针)来寻找的,
但是对象是用.
指针是用->
想了一下应该是后来扩展用的指针->,同时保留了之前的 . 的操作吧
页: [1]
查看完整版本: 一个类的名称是一个指针吗??