前面讲的面向过程和面向对象,大家都有了基本的了解,也用struct定义了类,那么接下来咱们就用C++提供的另一个关键字class来定义类,同样的我们还是使用前面的学生结构,首先直接把struct改成class看有没有什么问题。
class Stu //定义学生结构
{
int id;
int age;
char name[10];
void init(int sid = 0, int sage = 0, const char* sname = "NULL")
{
id = sid;
age = sage;
strcpy(name, sname);
}
void showStuInfo()
{
cout << id << " " << age << " " << name << endl;
}
};
int main()
{
Stu cPlus;//前面讲过在C++中可以省略,struct关键字
cPlus.init();// error “Stu::init”: 无法访问 private 成员
cPlus.showStuInfo();//error “Stu::showStuInfo”: 无法访问 private 成员
return 0;
}
编译代码会发现,有两处错误,大概的意思都是说无法访问private成员,那么什么意思呢?这就是struct和class的不同之处了:
- struct 默认是公有(public)的:即在类的外面可以访问类里面的成员(如果没有指定权限访问限定符)
- class 默认是私有(private)的:即在类的外面不可以访问类的成员(如果没有指定权限访问限定符)
相同点:
- 都可以使用权限访问限定符来修改类成员,在外部的访问权限(除此之外struct和class没有任何区别)
对于上面的代码,我们可以这样修改一下在类中的最上面加上public,这样就可以在外面随意访问成员啦
如果说只想让外部能够访问成员函数,而不想让外部访问到成员变量,那么可以这样
至于protected访问限定符,是作用与派生类中的,这个后面会讲到(对于类的外部来说,和private一样)
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
C++
+关注
关注
22文章
2104浏览量
73485 -
Class
+关注
关注
0文章
53浏览量
19712 -
Struct
+关注
关注
0文章
31浏览量
10857
发布评论请先 登录
相关推荐
关于LabVIEW 类及其对象使用的疑问
各位大神,我一直有个关于LabVIEW中使用类的问题。。。。当我建好一个类之后,直接将其拖到一个VI的程序框图中,相当于一个类的对象,在这个VI中我可以随便操作这个
发表于 11-23 22:20
JAVA和C++区别
。 8 字符串 c和c十十不支持字符串变量,在c和c十十程序中使用Null终止符代表字符串的结束,在Java中字符串是用类对象(strinR和stringBuffer)来实现的,这些类对象是
发表于 10-10 14:50
3分钟看懂Python面向对象
Python虽然是解释型语言,但从设计之初就已经是一门面向对象的语言,对于Python来说一切皆为对象。正因为如此,在Python中创建一个类和对象是很容易的,当然如果习惯面向过程或者
发表于 06-08 14:20
VEE对象是否支持阿拉伯字符?
大家好,有人知道VEE对象是否支持阿拉伯字符?我假设他们是Microsoft Windows应用程序的一部分,但如果有人有阿拉伯语运行的VEE应用程序的屏幕截图,我真的很感激!有人设法让VEE对象
发表于 04-02 06:17
LabVIEW面向对象的ActorFramework(1)
领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。 面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统
发表于 02-10 14:09
类对象分配内存错误怎么办
请大神帮忙,万分感谢!!!操作系统:ucosIII 芯片:STM32F103我的类建立比较多。类对象是指针CCarriage*gCar;分配内存语句:gCar = new CCarriage
发表于 05-25 09:51
SystemC TLM中的接口
SystemC TLM中的接口 在SystemC TLM中,接口是一个C++的抽象类。抽象类中的所有方法都是用“=0”标识表示的纯虚函数。C++不允许创建抽象类的对象,因为抽象
评论