未定义的标识符Point——类函数定义

问题背景:

在读新的程序的时候,遇到未定义的标识符Point,自己也不清楚这个到底是内置的常规变量,引入常规的头文件也无法解决,上网搜索未定义的标识符Point也没有给出答案,我就想到了这个是不是自己定义的类函数,所以应该需要在程序中加入这个类函数的定义段才能正常运行。

问题:

由于我没有学过C++,不太懂类函数如何定义,所以搜索学习了下类函数的定义,自己梳理一下,也顺便分享给大家,在自己的理解下自圆其说,如果有理解表述不对的地方,还希望各位多多指教。

问题解剖:

一、类函数作用

声明变量但不定义变量

函数的声明和定义_Persistence_Y_1的博客-CSDN博客_函数的声明

声明:说明函数的名字,参数,返回类型;

定义:说明函数的具体实现方式,交代清楚函数的功能。

二、类函数的组成

首先需要清楚定义一个类函数,里面主体包含的几部分

class Point
{
public:
    Point(double x=0, double y=0);
    void Set(double x, double y);
    void LeftMove(double dx);
    void UpMove(double dy);
    void Display();
private:
    double m_x;
    double m_y;
};

类函数中包含

1、public:

指的是共有变量,任何外部函数都可以访问共有类型数据和函数。

2、private:

指的是私有变量,只允许本类中的函数访问,而类外部的任何函数都不能访问。

我的理解是共有变量相当于说明一下各成员函数的输入变量,这些输入变量大多可能会与私有变量进行关联,相当于对这一类函数对私有变量进行不同操作后返回结果,所以私有变量就类似函数的返回值。

具体成员函数实现的功能是在类函数的声明后去定义的。

3、protected:

与private相似,其差别表现在继承与派生时对派生类的影响不同。

三、类函数如何声明?

声明函数的名称,参数,返回类型 

Point(double x=0, double y=0);     //double是定义这个参数变量,=0是给其赋值。

                                                     // 构造函数的实现:(不能规定返回类型return)

void Set(double x, double y);       //void代表空,说明此函数执行完不返回任何值


四、具体成员函数的定义

构造函数

//三种构造函数的方式

Point::Point(double x, double y)      //第一个Point代表类函数的名称,带二个point代表成员函数-构造函数的名称  ::起到调用的作用
//Point用于实现对函数的数据成员x,y进行初始化
//double x与double y是这个成员函数的输入变量
{
    m_x = x;     //输入变量与私有变量产生关联
    m_y = y;
}


Point::Point(double x, double y):   //初始化列表
m_x(x),m_y(y) {}     


Point::Point(double x, double y):m_x(0),m_y(0) {}    //默认构造函数

::在C++中是什么意思 - 百度文库 (baidu.com)

C++类的定义_Sermiscry的博客-CSDN博客_c++ 定义类

在对象被创建时使用特定的值构造对象,或者将对象初始化为一个特定的初始状态

  • 函数名与类名相同
  • 不能定义返回值类型,也不能有return语句,但也不能用void
  • 不能人为调用,只能系统调用
  • 可以有形式参数,也可以没有形式参数
  • 可以重载
  • 可以带默认参数值

默认构造函数(调用时可以不需要实参的构造函数)

  • 参数表为空的构造函数

  • 全部参数都有默认值的构造函数

  • 构造函数调用顺序:先调用内嵌对象的构造函数(按内嵌时的声明顺序,先声明者先构造)。然后调用本类的构造函数。

五、类函数的调用

int main()
{
    double x1, y1, x2, y2, dx, dy;     //在主函数中定义需要用到一些的双精度变量
    cin >> x1 >> y1;                   //cin代表键盘键入对变量赋值,>>代表需要空格分隔输入变量
    cin >> dx;
    cin >> dy;
    cin >> x2 >> y2;
    Point p1;                          //调用Point类函数,函数名称为为p1,一开始没有对p1输入变量进行初值化,但函数初值为零,将其赋值给m_x,m_y
    p1.Display();                      //输出
    p1.Set(x1, y1);                    //set函数的输入变量是x1,x2,作用是起到对p1初值化的私有参数重新赋值
    p1.Display();
    p1.LeftMove(dx);                   //leftMove起到对p1私有参数中的x内容进行减值的操作,减值的大小为输入变量dx
    p1.Display();
    p1.UpMove(dy);                     //UpMove起到给p1私有参数中的y内容增值的操作,增值的大小为输入变量dy
    p1.Display();
    Point p2(x2, y2);                  //调用Point类函数,函数名称为为p2,对p2进行初值化,其中的x赋值x2,y赋值y2,再将其赋值给其m_x,m_y
// p1和p2虽然都调用了Point类函数,但他们属于不同的函数(函数p1和函p2),进行了不同的初值化,不公用私有变量              
    p2.Display();
    return 0;
}

实例

类与对象练习题(一)---Point类_Lucky_追梦仔的博客-CSDN博客

定义一个Point类,数据成员包括私有数据成员为double类型的点坐标x,y;成员函数包括构造函数Point(用于实现对数据成员x,y的初始化)、成员函数Set(用于改变数据成员x、y的值)、成员函数LeftMove(点坐标向左移动detax)、成员函数上移UpMove(点坐标上移detay)、成员函数Display(用于输出点坐标x、y,输出格式为点坐标用逗号分隔并半角圆括号括起来)

程序:

#include<iostream>
using namespace std;
class Point
{
public:
    Point(double x=0, double y=0);
    void Set(double x, double y);
    void LeftMove(double dx);
    void UpMove(double dy);
    void Display();
private:
    double m_x;
    double m_y;
};
Point::Point(double x, double y)
{
    m_x = x;
    m_y = y;
}
void Point::Set(double x, double y)
{
    m_x = x;
    m_y = y;
}
void Point::LeftMove(double dx)
{
    m_x = m_x - dx;
}
void Point::UpMove(double dy)
{
    m_y = m_y + dy;
}
void Point::Display()
{
    cout << "(" << m_x << "," << m_y << ")" << endl;
}
int main()
{
    double x1, y1, x2, y2, dx, dy;
    cin >> x1 >> y1;
    cin >> dx;
    cin >> dy;
    cin >> x2 >> y2;
    Point p1;
    p1.Display();
    p1.Set(x1, y1);
    p1.Display();
    p1.LeftMove(dx);
    p1.Display();
    p1.UpMove(dy);
    p1.Display();
    Point p2(x2, y2);
    p2.Display();
    return 0;
}

输出结果:

1
2
3
4
5
6
(0,0)
(1,2)
(-2,2)
(-2,6)
(5,6)

D:\Software\VSfile\canny\x64\Debug\canny.exe (进程 30684)已退出,代码为 0。
按任意键关闭此窗口. . .

好啦,就这么多了,如果我的博文有帮到你,请点赞给我加油呀,也谢谢在解决问题过程中参考的诸位大佬们啦~

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值