天天看点

typedef与using、struct与class的区别

typedef与using区别

  • 定义一般类型的别名没区别,都是用来简化代码。如

    typedef string::size_type str_sz

    ,将

    string::size_type

    类型命名为

    str_sz

    ,类型名在前,别名在后;而using的用法为

    using str_sz=string::size_type

    ,别名在前,类型名在后;
  • 定义模板的别名,只能使用using。如:

    using cell = pair<void*, cell*>

struct与class的区别

  • 默认的数据成员访问权限

    struct是public的,class是private的。即不加访问限定符时,struct结构体内的成员默认都是共有的,可访问的(public),而class结构体内的成员默认私有(private),如:

struct student{
void getName(string _name);//默认public
void getAge(int _age);//默认public
private:
string name;
int age;
}
           
class student{
string name;//默认private
int age;//默认private
public:
void getName(string _name);
void getAge(int _age);
}
           
  • class可用于定义模板参数,就像“typename”。但struct不用于定义模板参数。

总的来说,struct和class一般情况下功能是差不多的,但我认为struct偏向于结构体(数据结构),而class更像定义一个对象,另外,虽然二者可以通过访问控制来分辨,但编程序时的优良习惯应该是加上访问控制符(public、private、protected),而不是靠默认,这样会增加代码的整洁性和易读性。