class和struct的唯一区别就是权限不一样。
- class默认的属性是private。
- struct默认的属性是public。
- 事实上在内存存储上也没有区别,只是编译器给访问上进行了限制。
- 继承上有区别,struct默认public,继承后可以访问父类。class想要访问父类class的成员,必须首先将自己的成员都声明为public,并且继承时注明要public的方式继承(因为默认继承是私有的)。
struct test
{
int a;
int b;
};
struct sub:test
{
int x;
int y;
};
//更改默认属性,此时仍然不可以访问
class test
{
public:
int a;
int b;
};
class sub:test
{
public:
int x;
int y;
};
//更改继承方式,可以访问。
class test
{
public:
int a;
int b;
};
class sub:public test
{
public:
int x;
int y;
};
如果在结构/类种写函数的实现,会使得结构/类变的非常庞大,所以应该在结构中只写函数的声明,具体的实现放到外面。
void Test::Init(int x,int y, int y);冒号代表一种范围,告诉编译器这个函数不是普通函数,这个函数属于哪个结构。
#include<stdio.h>
#include<malloc.h>
class Test
{
int x;
int y;
int z;
void Init(int x,int y,int z);
void Function();
void Function1();
void Function2();
void Function3();
};
void Test::Init(int x,int y,int z)
{
}
void Test::Function()
{
}
void Test::Function1()
{
}
void Test::Function2()
{
}
void Test::Function3()
{
}
int main(int argc,char *argv[])
{
return 0;
}
public:这个成员谁都可以用,不用担心被修改,所以,一旦发布成public的成员,是不能够改名字的。
private:这个成员只允许在内部使用,不要在其他的地方使用。
- 对外提供的变量或者函数,发布成public的,但不能随意改动。
- 可能会变动的变量或者函数,定义成private的,这样编译器会在使用的时候做检测。
- 只有结构体内部的函数才能访问private的成员。
- publice/private可以修饰函数也可以修饰变量。
- 存储值的变量都应该定义成私有的,想访问时通过内部函数访问。
#include<stdio.h>
#include<malloc.h>
#include"class.h"
struct person
{
private:
int age;
public:
int SetAge(int age)
{
if(age<0 || age >100)
{
printf("input error!\n");
return -1;
}else
this->age = age;
}
int GetAge(void)
{
return age;
}
void print(void)
{
printf("age = %d\n",this->age);
}
};
void tsetfunction(void)
{
person p;
int x;
p.SetAge(200);
p.print();
p.SetAge(-2);
p.print();
p.SetAge(60);
p.print();
x= p.GetAge();
printf("%d\n",x);
}
int main(int argc,char *argv[])
{
tsetfunction();
return 0;
}
不管是private还是public,在内存中存放是一样的,不允许访问私有数据只是编译器不让访问,通过指针强制访问也可以访问。
#include<stdio.h>
#include<malloc.h>
#include"class.h"
struct test
{
private:
int x;
public:
int y;
void Init(int x,int y)
{
this->x = x;
this->y = y;
}
};
void tsetfunction(void)
{
test t;
t.Init(2,3);
int *p = (int *)&t;
printf("x = %d\n",*p);
printf("y = %d\n",*(p+1));
}
int main(int argc,char *argv[])
{
tsetfunction();
return 0;
}