C++允许在结构中定义函数,该函数称为成员函数。其描述形式如下:
struct 结构名{
数据成员
成员函数
}
下面是一个使用成员函数的例子
#include <iostream>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
struct Point
{
double m,n;
void Setab(double a,double b)
{
m=a;
n=b;
}
void display()
{
cout<<"display()------>>" <<m<<"\t"<<n<<endl;
}
};
int main(int argc, char** argv)
{
Point p;
p.Setab(2,3);
p.display();
cout <<"数据成员"<<p.m<<"\t" <<p.n <<endl;
return 0;
}
总结:
1、用到了结构块 结构块中的函数调用的方法,写完上面程序发现C++的结构块像Java中静态方法,直接用结构名调用数据成员和成员函数;还有一个就是“\t” 是制表符意思是横向跳到下一个制表符的位置,相当于键盘上的Tab键,“\n”换行相当于endl;
2、在结构中成员默认都是public如不不希望对象直接访问数据成员,可以将数据成员使用private来修饰,即私有的数据成员,必须通过共有的成员函数才能使用,成为数据的封装性,下个小例子看看数据的封装性。
今天又运行了这个代码发现将结构体放到main后面后不能编译通过,查看日志找不到结构体 意思是没有声明结构体的,然后就看了一些书籍和文章有点人说在main函数之前添加struct Point; 但是这种写法是不行的根本没用然后就搜索结构体的声明然后看到声明的方式。下面将代码贴出来有需要的可以参考下。
#include "stdafx.h"
#include <iostream>
//命名空间
using namespace std;
struct Point{
double m,n;
void setab(double a,double b);
void disply();
};
int main()
{
Point p;
p.setab(23,45);
p.disply();
getchar();
return 0;
}
void Point::setab(double a,double b)
{
m=a;
n=b;
}
void Point::disply()
{
cout<<m<<n<<endl;
}
上述方式虽然是可以了但是看到结构体前置声明很麻烦 代码很多所以综合起来还是用第一种方式比较好直接将结构体放到main函数的上面,代码都是自上而下执行的。