时间:2023-01-20 09:35:26 | 栏目:C代码 | 点击:次
c++类的由来(或者说为什么要增加类):我们知道c语言是面向过程的语言,c++是即面向过程又是面向过程的语言。那么这两个有着什么样的区别和联系呢?
接下来我们利用c语言的struct来说明:
C 语言中,结构体中只能定义变量。 在 C++ 中,结构体内不仅可以定义变量,也可以定义函数。 例如:如果我们用C语言实现一下的功能,那么我们会发现,在struct内我们只能去定义一些变量 的类型,而我们需要的函数反而要去单独去实现
typedef struct Student { char _name[20]; int _age; char _sex[10]; }student; void SetStudentInfo(const char* name, const char* sex, int age) { strcpy(_name, name); strcpy(_sex, gender); _age = age; } void print(student *s) { printf("%c:%age-%c", s->_name, s->_age, s->_sex); }
在c++内实现的话是:
// 这里是为了和c语言做出区别所以将函数的定义也直接放到结构体内作为内联函数, 如果函数的定义代码很多或者需要调用的次数多建议此处就只进行声明,之后在单独进行定义 struct Student { void SetStudentInfo(const char* name, const char* sex, int age) { strcpy(_name, name); strcpy(_sex, gender); _age = age; } void print(student *s) { printf("%c:%age-%c", s->_name, s->_age, s->_sex);//此处为了区别和c语言struct的不同点利用了c语言的输出方法 } char _name[20]; int _age; char _sex[10]; };
从上述例子我们可以看出在c++中struct可以包含函数的定义和变量,反观在c语言内struct就只能包含变量。
在c++中我们引入一个关键词class来指定指定这种既可以包含变量又可以包含函数声明的类型即为c++的类。struct在c++中也是类但是和class修饰还是有一些区别。我们用上述代码来说明这个区别:
这是struct修饰的类
struct Student { void SetStudentInfo(const char* name, const char* sex, int age); void print(student *s) char _name[20]; int _age; char _sex[10]; }
这是class修饰的类
struct Student { public: void SetStudentInfo(const char* name, const char* sex, int age); void print(student *s) private: char _name[20]; int _age; char _sex[10]; }
在类中我们保护我们我们的数据,我们引入三种修饰:public
、private
、protected
,这三个关键词代表着不同的权限。
而struct默认的是成员函数和成员变量都是public,而class修饰的话成员函数和成员变量都是必须给予修饰的,一般我们是将成员函数用public修饰而成员变量我们用private修饰。