嗯嗯没错。。。在纯C中结构体中不可以定义成员函数;结构体中可以定义成员函数是C++的一个创新,在C++中的结构体与类基本相同,
创新互联公司主要从事成都网站建设、成都网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务朗县,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575
都可以定义成员变量和成员函数,唯一的区别是在C++中结构体的默认访问控制符是public,而类的默认访问控制符是private示例如下:
struct student
{
public: //默认的访问控制符,可以省略
char name[20];
int NO;
int sum(int x, int y);
};这里边的成员函数和成员变量可以直接被使用;
class student
{
private: //默认的访问控制符,可以省略
char name[20];
int NO;
int sum(int x, int y);
public ://非默认的访问控制符,如省略则不用被直接访问
void input(char * name);
};这里边的成员函数和成员变量不能被直接使用,只能通过其共有的成员函数调用来使用它们;例如只能通过调用该类的input函数来为name[20]赋值(这里排除有构造函数的情况哈);
类有基类和派生类,类成员包括私有成员、公有成员,受保护成员。私有一般是数据成员,公有成员一般为函数成员。函数成员可以有构造函数、函数成员(或叫接口),也可以封装(我的理解是内连函数),友元函数(可以访问类私有数据,但不是成员函数)、析构函数!
#include iostream.h
class ok
{
int a;
static int s;//声明静态数据成员
public:
ok(int a);
static void show();//声明静态成员函数
};
int ok::s=0;//定义并初始化静态数据成员
ok::ok(int a)
{
this-a=a;
s+=a; //非静态成员函数可以访问静态数据成员
}
void ok::show() //静态成员函数的实现
{
//coutaendl; //错误代码,a是非静态数据成员
cout"s="sendl;
}
void main()
{
ok cat(2);
cat.show();
ok dog(3);
dog.show();
ok::show();
}
/*------------------------------------------------------------
○静态成员之间可以相互访问,如静态成员函数访问静态数据成员和静态成员函数;
○静态成员函数没有this指针。无法访问属于类对象的非静态数据成员和非静态成员函数,
○非静态成员函数可以访问静态成员函数和静态数据成员;
○静态成员函数不能访问非静态成员函数和非静态数据成员;
○由于没有this指针的额外开销,因此静态成员函数与类的非静态函数相比速度上会有少许的增长;
○非静态成员函数总是具体的属于某个类的具体对象,this是缺省的;
-------------------------------------------------------------*/
这个,真的不可以,C本来就是面向过程的语言,还不涉及到面向对象的思想(虽然用C也可以实现面向对象的编程)
不对。成员函数可以属于类,而不属于被实例化的对象,另外,语言规范允许虚函数这样的成员函数存在。
区别很大:
1.成员函数是面向对象的概念,所谓的成员函数,是指一个函数作为类的成员,公有成员、私有成员或者保护成员。
2.普通函数一般有两种传递方式,按类型传递和按值传递,也就是传指针和传返回值两种情况。成员函数一般是按类型传递,也即是传指针地址
3.普通函数可以随便调用,并且无法继承和封装,成员函数根据类的不同,可以进行继承,根据公有私有的不同,调用方式也不同
4.深层次的区别,普通函数作为C语言的概念,用的是stdlib,成员函数是用iostream,编译方法不同,至于谁占内存多,并不好说,也不是说面向对象的就占内存大些,还是看具体的环境和编译器。
5.嵌入式的编程,用普通函数较多,成员函数较少,当然ARM嵌入linux那种例外
大体上能一下子想到的只有这么多了
函数是否分配内存,看变量,这个问题,我得详细解释一下,你是否熟悉汇编?知道不知道函数字段这个概念,也就说,所有函数都是分配在一段共享字段里面的,也就是你所说的内存,其实不仅仅是内存,包括闪存等等都可以包含,所以是占用了一段空间的,只是这段空间不一定在内存内,可能在闪存内,也可能在硬盘内,这么说,你清楚吗?