c++ - 在不使用对象的情况下调用类方法?

标签 c++

对于那些经验丰富的 C++ 编码人员来说,这似乎是一个愚蠢的问题,但我认为一旦你有了一个类并创建了该类的对象,你就可以使用你创建的对象调用该类的公共(public)方法 (除非它是静态方法,在这种情况下,您可以使用对象或类名本身来调用它)?

那为什么会这样呢?

函数定义:

template <typename Object>
void printList(const List<Object>& theList) {
    if (theList.isEmpty())
        cout << "Empty list!" << endl;
    else {
        ListItr<Object> itr = theList.first();
        for(; !itr.isPastEnd(); itr.advance())
            cout << itr.retrieve() << " ";
    }

    cout << endl;
}

函数调用:

printList(myList);

我在这里错过了什么?程序的其余部分如何知道 printList()属于类List<int>除非我调用printList()使用 List<int> 的对象?

顺便说一句,这也有效,我刚刚检查过。我会使用这种调用和定义函数的方式。请注意,这次函数是使用 this 定义的指针,我认为它的工作方式。

函数定义:

template <typename Object>
void List<Object>::printList() {
    if(this->isEmpty())
        cout << "Empty list!" << endl;
    else {
        ListItr<Object> itr = this->first();
        for(; !itr.isPastEnd(); itr.advance())
            cout << itr.retrieve() << " ";
    }

    cout << endl;
}

函数调用:

myList.printList();

最佳答案

这里是瞎拍的,但是你是不是希望下面的函数是T的成员函数?

void print(const T& someT);

因为它不是。它只是一个接受 T 的免费函数。


下面是一个类定义和成员函数声明(虽然成员函数很傻,因为它接受一个可能完全多余的参数):

struct T {
   void print(const T& someT);
};

下面是同一个愚蠢的成员函数,定义为外联:

void T::print(const T& someT) {
   // ...
}

从你的问题中不能完全清楚你在这里真正做的是哪一个,但第一个绝对不是成员函数。

关于c++ - 在不使用对象的情况下调用类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9538801/

相关文章:

c++ - OpenCV 立体校准旋转矩阵

C++ STL 容器。为每个不同的实例参数化一个比较器

c++ - 调试断言失败! (c++)

c++ - 为什么在使用 8 个生产者 1 个消费者进行测试时,golang channel 比 intel tbb concurrent_queue 快得多

c++ - 从字符串中提取数字 (Regex C++)

c++ - 单个类出现类重定义错误

c++ - 更新数组元素(数组中有新元素进入后,最旧的元素将被删除)

android - 在 Android 上显示由 OpenCV 创建的图像

c++ - 在 opencv2 和 opencv3 中使用 findContours 时的输出差异

c++ - 处理有关可能丢失数据的编译器警告的最优雅方法是什么