c++中的结构和c中的结构有什么区别?
c++中结构除具备了c中结构的所有功能外,还增加了很多拓展功能,其中最突出的拓展功能之一就是:c++中的结构不仅有成员变量,还可以定义成员函数(或者说方法)
权限修饰符:public private protect
public:公共的意思,用这个修饰结构/类中的成员变量/成员函数,就可以被外界访问。一般我们需要能够被外界访问的东西,就定义为public就好像是该类的外部结构一样,也就是在类的作用域外也还可以使用。
private:私有的意思,用这个修饰符修饰。结构/类中的成员变量/成员函数,只有被内部定义的成员函数才能使用,也就是只有在类的成员函数内能用。当类的成员变量被声明为私有,则只能在类中定义的成员函数中能用。如果一个成员函数被声明或定义成私有,则改成员函数只能在类中定义的成员函数中使用。也就是说外界看不到private声明或定义的变量,在外界看来就好像没有一样。
protect:欲知后事,且听下回分解。这个等到以后来说。
结构和类的区别
1)类这个东西,只在c++中才有这个概念,c中没有这个概念
2)结构用struct定义,类用class定义。我们定义一个属于该结构的变量,我们叫结构变量。我们定义一个属于该类的变量,我们叫对象
struct date { int year; int month; int day; }; struct date oneday; // struct date 是类型名,我们自己定义的类型。然后用我们自己定义的类型,定义一个属于该结构的变量,变量名叫oneday int a; //定义一个属于int的变量,变量名叫a。在不理解,只能说你还得从c语言学了 class student { public: char name[20]; int age; int number; } student zhangsan; //定义一个属于该类的变量,通常称为对象。对象名叫zhangsan
3)结构变量内部变量及其成员函数默认的访问级别都是public,也就是在外部都能访问。类内部成员变量和成员函数默认的访问级别都是private。
4)c++结构体继承默认都是public,而c++类的继承默认都是private。
总结一下:结构和类唯一的区别,就是结构默认是public,而类默认是private。结构中也可以定义成员函数,正常人不这么干,但是可以定义构造函数,这个和类类似,构造的时候初始化内存。也许你现在看不懂但是以后会慢慢明白的。再说一下,在c++中,结构是用来定义变量的,所以在结构里边很少会定义函数。我们就把它当一种类型来使用。所以为了规范,当类中没有方法是,用结构来代替,当类中有方法时,绝不用结构写。
结构变量也好,对象也好,他们都是一块能够存储数据并且具有某种类型的内存空间。注意小细节:是结构变量不是结构,是对象不是类哦。我也没说结构变量中不能存储数据,类中不能存储数据,这个话题我们以后慢慢说。结构变量是结构的实例化,对象是类的实例化,所以里边能够存储数据,这样理解,没毛病吧?
类的代码的组织
类的定义代码会放在一个.h头文件当中。头文件名可以和类名相同。
类的具体实现代码,主要是函数的实现,放在一个.cpp文件中。
这张图告诉我们这些信息:
这个项目包含三个文件:student.cpp文件,sudent.h头文件,other.cpp文件
类分为两个部分,一个部分是声明,另外一个部分是定义,或许有点疑惑,坚持看下去。类的声明是在.h结尾的文件中完成的,我们通常称为头文件。类中的函数可以在声明的时候就可以定义,如Howold函数就是类内定义,func函数是在类外定义,也就是在student.cpp文件中定义的,记住,这才是函数的定义。我们在student.h中哪个没有函数名后面没有{},所以只是声明,现在才是定义。当然了在类里边定义,和类外定义是有区别的,有些函数我们会定义在类里,有些函数我们定义在类外,具体情况,具体分析。定义在类里的函数,可以理解成内敛函数。关于内敛函数,后面会讲,都是一个一个简单的知识点。不难。
当我们要用该类时,include该类的头文件,在该文件中就可以使用该类了。如在main.cpp中。其他文件只要include也可以正常使用。
//student.h…………………………………………………………………………………………….. class student { public: char name[20]; int age; int number; void func(); int Howold() //内联函数 { return age; } } //student.cpp……………………………………………………………. include "student.h" void student::func() { age++; } //main.cpp……………………………………………………………… #inlcude "student.h" //注意哦,include了student.h头文件。 using namespace std; student stu; stu.age=12; strcpy(stu.name,sizeof(stu.name),"zhangsan"); stu.func(); cout<<stu.age<<endl; cout<<stu.name<<endl;
补充一个知识点:只有内联函数才能写在头文件中,因为其他函数都不行。
//student.h…………………………………………………………………………………… class student { public: char name[20]; int age; int number; void func(); int Howold() //写在类内的函数,所以是内联函数 { return age; } } void student::func() //在头文件中这样定义成员函数是不正确的,成员函数的定义应该在一个同名的.cpp文件中实现,如果多个.cpp文件include该头文件会造成函数的重复定义,但是内联函数没有这样的问题,所以可以定义在头文件中。不懂的话以后会再解释。 { age++; }
原文地址:https://www.cnblogs.com/for20201001/p/11701350.html