VC++ 一段小程序,请大大们帮忙逐行解释下,万分感谢。我初学

#include<iostream.h>#include<string.h>classCMyPoint{private:intm_nX;intm_nY;char*m_pN... #include <iostream.h>
#include <string.h>
class CMyPoint
{private:
int m_nX;
int m_nY;
char*m_pName;
public:
CMyPoint();
CMyPoint(int nX,int nY);
~CMyPoint();
void SetX(int nX);
void SetY(int nY);
int GetX();
int GetY();
void Display();
};
CMyPoint::CMyPoint() { //缺省构造函数
m_nX=0;
m_nY=0;
m_pName=new char[2];
strcpy(m_pName,"A");
}
CMyPoint::CMyPoint(int nX,int nY) {
m_nX=nX;
m_nY=nY;
m_pName=new char[2];
strcpy(m_pName,"B");
}
CMyPoint::~CMyPoint() { //析构函数
if(m_pName!=NULL) {
delete []m_pName;
m_pName=NULL;
}
}
int CMyPoint::GetX() {return m_nX;}
int CMyPoint::GetY() {return m_nY;}
void CMyPoint::SetX(int nX) {m_nX=nX;}
void CMyPoint::SetY(int nY) {m_nY=nY;}
void CMyPoint::Display() {cout<<*m_pName<<" "<<GetX()<<" "<<GetY()<<endl;}

//程序运行完成后对象point调用析构函数
void main()
{
CMyPoint point; //调用了构造函数
point.Display();
CMyPoint *Ppoint=new CMyPoint(2,3); //调用了构造函数
Ppoint->Display();
delete Ppoint; //调用了析构函数
}
展开
 我来答
落寞深秋
推荐于2016-01-13 · 超过37用户采纳过TA的回答
知道答主
回答量:90
采纳率:0%
帮助的人:0
展开全部
很简单的程序,我写注释好了. 祝LZ学习顺利.

#include <iostream.h> //IO头文件
#include <string.h> //字符串处理头文件
class CMyPoint //开始一个类CMyPoint的定义
{private:
int m_nX; //私有成员x
int m_nY; //私有Y
char*m_pName; //这个对象的名字

public: //开放的成员函数
CMyPoint(); //默认构造函数
CMyPoint(int nX,int nY); //带x y参数的构造函数
~CMyPoint(); //默认析构函数
void SetX(int nX); //设置x 函数
void SetY(int nY); //设置y函数
int GetX(); //获取x函数
int GetY(); //获取y函数
void Display(); //显示x y的显示函数.
};

//下面开始定义各个成员函数的 函数体
//默认缺省的xy值是0 0, 点被命名为"A"
CMyPoint::CMyPoint() { //缺省构造函数
m_nX=0;
m_nY=0;
m_pName=new char[2]; //2是因为 A 和结束符 \0
strcpy(m_pName,"A"); //设置m_pName为"A",字符串复制函数
}

//带参数的构造函数 点被命名为B
CMyPoint::CMyPoint(int nX,int nY) {
m_nX=nX;
m_nY=nY;
m_pName=new char[2];
strcpy(m_pName,"B"); //设置m_pName为"A"
}

//析构函数,当这个类超出作用区域的时候,编译器会添加这个函数在代码中,我们要做的就是写对这个函数.

CMyPoint::~CMyPoint() { //析构函数
//delete一个指针的时候 一定要检查是否为null,否则是个严重的应用程序错误.
//由于m_pName是用new 产生的空间 所以需要 delete来释放掉, new的东西都不会自己消除,需要我们在适合的使用调用delete
if(m_pName!=NULL) {
delete []m_pName; //因为它是一个数组所以需要用delete []
m_pName=NULL; //将它设置为null 防止再次使用这个指针去访问原来的地址,原来的地址已经被我们delete了.但编译器不会帮我们自动清它为null 所以我们自己清.
}
}
//这些成员函数就不用说了.
int CMyPoint::GetX() {return m_nX;}
int CMyPoint::GetY() {return m_nY;}
void CMyPoint::SetX(int nX) {m_nX=nX;}
void CMyPoint::SetY(int nY) {m_nY=nY;}
//显示一个字符串. endl是回车键加 清空缓冲区的 综合体.
//貌似m_pName是不应该加*号的, 它是字符串指针,cout会自动输出整个字符串,若加了* 则成为字符,则cout只输出了第一个字符,由于名字只有一个字符 所以没产生错误.
void CMyPoint::Display() {cout<<*m_pName<<" "<<GetX()<<" "<<GetY()<<endl;}

//程序运行完成后对象point调用析构函数
void main()
{
//这样的声明是在栈上的,系统会自动帮我们删除这个变量.
CMyPoint point; //调用了构造函数
//显示 A: 0 0
point.Display();

//这样的声明使用了new, 需要我们自己使用delete才会删除内存.
CMyPoint *Ppoint=new CMyPoint(2,3); //调用了构造函数
//显示B: 2 3
Ppoint->Display();
//DELETE 我们new的对象.
delete Ppoint; //调用了析构函数

//其实不delete的话,当程序退出的时候,内存都会被系统释放,不会有内存泄漏的问题.
内存泄漏说的是 长时间运行的程序(几年几月),如果不管理好你的内存,到时候会无内存可用.
}
墨菲定律8E
2008-04-06 · TA获得超过296个赞
知道小有建树答主
回答量:403
采纳率:0%
帮助的人:178万
展开全部
还是学VC吧,可视化的C语言!方便易学!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式