一.C语言和c++中struct的区别
c语言是面向过程的语言,struct代表了一种数据构造类型,它只能用来定义数据成员,而不能用来定义函数
struct Point
{
int x; // 合法
int y; // 合法
void print()
{
printf("Point print\n"); //编译错误
};
};
c++是面向对象的语言,struct和class极为相似,是用来定义一个类的,所以struct定义的类中不仅可以有成员变量还可以有成员函数
struct SPoint
{
int x; //默认为public
int y; //默认为public
void print() //默认为public
{
cout << "SPoint: (" << x << ", " << y << ")" << endl;
}
SPoint(int x, int y) //构造函数,默认为public
{
this->x = x;
this->y = y;
}
private:
void print1() //private类型的成员函数
{
cout << "SPoint: (" << x << ", " << y << ")" << endl;
}
};
二.c++中struct和class的区别
虽说c++中struct和class是极为相似的,但它们之间也有很大的差异
1.struct定义的类的成员如果不加public,private,protected属性的话默认是public属性。
struct AA
{
AA(int a)
{
A = a;
}
int A;//public属性
};
class BB
{
BB(int b)
{
B = b;
}
int B;
};
int main()
{
AA b(2);
cout << b.A;//输出成功
BB a(3);//编译不通过,无法访问私有成员
cout << a.B;
return 0;
}
2.class和struct都可作为基类,class的默认继承权限是private,struct的默认继承权限是public
struct AA
{
public:
AA(int a)
{
A = a;
}
void print()
{
cout << A;
}
private:
int A;
};
struct AAA :AA//默认继承权限为public
{
public:
AAA(int a, int b) :AA(a), aa(b)
{}
private:
int aa;
};
class BB
{
public:
BB(int b)
{
B = b;
}
void print()
{
cout << B;
}
private:
int B;
};
class BBB :BB//默认继承权限为private
{
public:
BBB(int a, int b) :BB(a), bb(b)
{}
private:
int bb;
};
int main()
{
AAA a(1,2);
a.print();//派生类成功访问基类中的公有成员
BBB b(3, 4);
b.print();//在类外不可访问,只能在类内访问
return 0;
}