struct与class的区别可以分以下两个方面来讨论:
一、C语言中的struct与C++中class的区别:
struct只是作为一种数据类型定义,不能用于面向对象编程。对于如下C语言片段:
struct Point
{
int x;
int y;
void print()
{
printf("Point.\n");//编译错误“函数不能作为Point结构的成员”
}
};
二、C++中的struct与C++中class的区别:
对于成员访问权限及继承方式,class中默认的是private,而struct中默认的是public。除此之外,class还可以用于表示摸板类型,struct则不行。
class访问权限 默认private,struct默认public
struct SPoint
{
int x;
int y;
void print()
{
cout<<"Point public."<<endl;
}
SPoint(int x, int y)
{
this->x = x;
this->y = y;
}
private:
void print1()
{
cout << "Point Private." << endl;
}
};
class CPoint
{
int x;
int y;
void print()
{
cout << "Point public." << endl;
}
public:
CPoint(int x, int y)
{
this->x = x;
this->y = y;
}
~CPoint(){}
void print1()
{
cout << "Point Private." << endl;
}
};
int main()
{
SPoint Sp(2,3);
CPoint Cp(2,3);
Sp.print();
Sp.print1();//函数不可访问
Cp.print();//函数不可访问
Cp.print1();
system("pause");
return 0;
}
class继承默认private,struct继承默认public
struct base
{
void print()
{
cout << "SBase:print()" << endl;
}
};
class Cderivate1 :base
{
void CDprint()
{
cout << "Cderivate1:print()";
}
};
struct Sderivate1 :base
{
void SDprint()
{
cout << "Sderivate1:print()";
}
};
class Cderivate2 :public base
{
void CDprint()
{
cout << "Cderivate2:print()";
}
};
struct Sderivate2 : private base
{
void SDprint()
{
cout << "Sderivate2:print()";
}
};
int main()
{
Cderivate1 cd1;
Cderivate2 cd2;
Sderivate1 sd1;
Sderivate2 sd2;
cd1.print();//函数不可访问
cd2.print();
sd1.print();
sd2.print();//函数不可访问
system("pause");
return 0;
}