C++新手的类成员函数

class member functions for C++ newbie

本文关键字:成员 函数 新手 C++      更新时间:2023-10-16

我是C++新手,目前正在为考试而学习,在VisualStudio中弄乱C++并尝试一些。通常我使用Java。

我写了一个简单的类来观察事情是如何工作的,以及是否工作:

class Point
{
private:
int x;
int y;
public:
Point(int arg1, int arg2)
{
x = arg1;
y = arg2;
}
};

我为 x 和 y尝试了 2 个简单的成员函数,使 x 和 y 变量中存储的值加倍。

首先我尝试了这个:

void doubleX()
{
x *= 2;
};
void doubleY()
{
y *= 2;
};

然后我试了这个:

void doubleX()
{
Point::x = 2 * Point::x;
};
void doubleY()
{
Point::y = 2 * Point2::y;
};

两者都放在类定义

在通过VisualStudio构建时,它给了我这个错误警告: "错误 C3867 '点::d oubleX':非标准语法;使用"&"创建指向成员的指针">

也试图弄乱地址指针,但是...我真的不知道。 我想我知道指针基本上是如何工作的,但我不知道如何在我的情况下使用它。

这个问题有什么快速的解决方案和解释吗?

提前感谢!

编辑:这是我的整个代码,问题现在主要在

#include "stdafx.h"
#include <iostream>
using namespace std;
class Point
{
public:
int x;
int y;
Point(int arg1, int arg2)
{
x = arg1;
y = arg2;
}
void doubleX()
{
x *= 2;
};
void doubleY()
{
y *= 2;
};
};
int main()
{
Point p(1,1);
int &x = p.x;
int &y = p.y;
cout << x << "|" << y;
p.doubleX; p.doubleY; //error message here
cout << x << "|" << y;
cin.get();
}

也许您没有在类定义声明成员函数?这是一个基于您的类的完整工作示例:

#include <iostream>

class Point
{
private:
int x;
int y;
public:
Point(int arg1, int arg2)
{
x = arg1;
y = arg2;
}
void doubleX()
{
x *= 2; /* or this->x *= 2; */
}
void doubleY()
{
y *= 2;
}
int getX()
{
return x;
}
int getY()
{
return y;
}
};

int main()
{
Point p(2, 3);
std::cout << "p.x = " << p.getX() << " | p.y = " << p.getY() << std::endl;
p.doubleX();
p.doubleY();
std::cout << "p.x = " << p.getX() << " | p.y = " << p.getY() << std::endl;
return 0;
}

您可以将其放在main.cpp文件中,编译并运行它。我用g++编译器对其进行了测试,它工作正常。

Valy 给出的答案是正确的。但我想提醒您,C++为您提供了另一种声明和定义方法的选择,即在类声明中声明方法并在类声明外部定义它们。这使您能够轻松地将接口和实现分别分离到.h.cpp文件中,如下所示:

点.h

class Point
{
private:
int x;
int y;
public:
Point(int arg1, int arg2);
void doubleX();
void doubleY();
int getX();
int getY();
};

点.cpp

#include "Point.h"
Point::Point(int arg1, int arg2)
{
x = arg1;
y = arg2;
}
void Point::doubleX()
{
x *= 2;
}
void Point::doubleY()
{
y *= 2;
}
int Point::getX()
{
return x;
}
int Point::getY()
{
return y;
}

点测试.cpp

#include "Point.h"
int main()
{
// Do something with Point here
Point pt(1, 2);
std::cout << "Original: (" << pt.getX() << ", " << pt.getY() << ")" << std::endl;
pt.doubleX();
pt.doubleY();
std::cout << "After being doubled: (" << pt.getX() << ", " << pt.getY() << ")" << std::endl;
return 0;
}

以及,如何编译:

g++ -o PointTest PointTest.cpp Point.cpp

由于声誉而无法发表评论,但似乎 vc++ 会输出您所说的错误消息,如果您尝试调用

Point::doubleX

下面是输出的实时示例: http://rextester.com/ZLCEW66682

您应该创建类的实例并使用括号调用该函数

在你的第二组函数中

void doubleX()
{
Point2::x = 2 * Point2::x;
};
void doubleY()
{
Point2::y = 2 * Point2::y;
};

如果您希望它们成为类 Point 的成员函数,Point::y...这不是您应该访问成员数据的方式。只能像这样访问静态成员变量。正确的方法是

void doubleX()
{
this->x = 2 * this->x;
};
void doubleY()
{
this->y = 2 * this->y;
};

那就是使用this指针。