一切还是有基础的好,没有基础就要学习。
结构体和类的操作,首先建立一个控制台程序,建立一个结构体struct Point,但是要注意在结构体定义最后要有“;”否则操作不成功。在结构体中定义两个变量x,y,这样我们在主函数中就可以使用结构体中的两个变量,此时在主函数中定义一个变量pt,做法为Point pt也就是说在pt中也可以包含两个可以使用的量,pt.x和pt.y,并对其赋值pt.x=5;pt.y=8,使用cout<<pt.x<<endl<<pt.y<<endl,编译运行可以看到输出结果。但是使用cout就要包含输出流头文件,在c语言中使用的是#include<iostream.h>,但是在进行C++操作时要用到#include<iostream> using namespace std;。
在C++结构体操作中也可以定义函数,我们可以在结构体中定义输出函数Output,随后在主函数中就不用是用cout进行输出,直接使用pt.Output();就可以达到输出的目的,运行结果符合要求。
我们进一步进行操作,将structure Point注释,并使用类操作class Point,此时就要在类中使用public;否则编译时提示主函数中使用私有变量,无法成功编译,相当于有一个private。类中还有一个访问权限使用protected,连接父类和子类之间访问权限。其实structure也是一种类操作,只不过在class中分为私有变量和共用变量,而structure却可以进行外部变量访问。但是如果在structure中使用private:例如
struct Point
{
private:
int x;
int y;
void Output()
{
cout<<x<<endl<<y<<endl;
}
};
我们会发现提示结果和在class中使用private:有相同的提示报警信息。
此外在类中也可以使用构造函数,,但是构造函数名要和类名一致,构造函数最重要的是构造对象本身每个类必须有一个构造函数,没有构造函数就不能创建任何对象,如果没有定义构造函数,C++就默认一个构造函数,但是只创建对象,而不做任何初始化操作,此外还有析构函数,析构函数是在函数执行完以后进行对变量内存分配和回收,但是析构函数不允许有返回值,不允许带参数,并且一个类中只能有一个析构函数。
函数重载,
void Output()
{
cout<<x<<endl<<y<<endl;
}
void Output(int x, int y)
{
this->x=x;//this指针是C++提供的一个隐含的指针,指向对象本身,代表了对象地址
this->y=y;
}这是进行函数重载操作,this->x=x,使用了this指针,如若不用该指针运行程序可以发现,运行结果是3,3因为void Output(int x, int y)函数中只是将x赋值给了x,若要得到5,5则可以使用this指针,或者void Output(int x, int y中的形参使用a,b就能达到结果
附一函数实例代码:
#include "stdafx.h"
#include<iostream>
using namespace std;
//struct Point
class Point
{
public:
int x;
int y;
//构造函数,构造函数最重要的构造对象本身每个类必须有一个构造函数,没有构造函数就不能创建任何对象,如果没有定义构造函数C++就默认一个构造函数,但是只创建对象,而不做任何初始化操作,此外还有析构函数,~Point
Point()
{
x=0;
y=0;
}
Point(int a, int b) //该构造函数带参数
{
x=a;
y=b;
}
//析构函数,在函数执行完以后,析构函数进行对变量内存分配和回收,析构函数不允许有返回值,不允许带参数,一个类中只能有一个析构函数
~Point()
{
}
//void init() //此函数是对结构函数中的变量进行初始化操作,完成赋值
//{
// x=0;
// y=0;
//}
void Output()
{
cout<<x<<endl<<y<<endl;
}
void Output(int x, int y)
{
this->x=x;//this指针是C++提供的一个隐含的指针,指向对象本身,代表了对象地址
this->y=y;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
Point pt(3,3);
pt.Output(5,5);
// pt.init();
// pt.x=5;
// pt.y=8;
// cout<<pt.x<<endl<<pt.y<<endl;
pt.Output();
return 0;
}