C++新手的类成员函数
class member functions for C++ newbie
我是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
指针。
- 对RValue对象调用的LValue ref限定成员函数
- 为什么使用 "this" 指针调用派生成员函数?
- 将公共但非静态的成员函数与ALGLIB集成
- 使用指向成员的指针将成员函数作为参数传递
- 将重载的成员函数传递给函数模板
- 我不小心调用了一个没有自己类对象的成员函数.但这是怎么回事呢
- 如何在C++中使用非静态成员函数作为回调函数
- C++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)
- 关联容器的下界复杂性:成员函数与非成员函数
- 在 C++ 中用派生类型重写成员函数
- 链表的泛型函数remove()与成员函数remove)
- 如何将lambda作为模板类的成员函数参数
- constexpr构造函数需要常量成员函数时出现问题
- 将自由函数绑定为类成员函数
- 区分非成员函数和头文件中的成员函数
- 如何从子成员函数修改父公共成员变量
- 保留对其他类的成员函数的引用
- 在运算符重载定义中使用成员函数(const错误)
- 内联如何影响模块接口中的成员函数
- 将成员函数指针作为参数传递给模板方法