类-Classes
来源:互联网 发布:淘宝上的息肌丸靠谱吗 编辑:程序博客网 时间:2024/06/07 00:50
C++提供了一种自定义类的机制,让程序员自己创造类型,来对应问题中的概念。类不但可以定义数据的复合,还可以定义该复合数据的操作。以便让本应由使用该数据类型的程序员做的工作分出来,让定义类型的程序员去完成。(与struct相像。)
由两部分组成:(1)类定义及其成员函数定义;类定义体中含有复合数据和成员函数声明。(2)应用部分。
class是一个关键字,它代表在下面的{...}中间声明一个类型.类在某些方面和C++中的struct很相似,但也有不同,比方说类有派生类,但是没人听说过派生结构吧.
那么class怎么用呢?
先看一个例子:
class A{public:int a,b;void print(){cout << a << ' ' << b << '\n';return ;}};
在这个例子中,我们为类A定义了两个公有变量a和b,以及一个公有函数print()用于输出a和b.调用则是:
A t;t.a = 10;t.b = 5;t.print();输出:10 5
类中总共有3中权限标识:public,private和protected.他们的区别是:public定义的成员可以被外部访问和修改;private成员不能被外部读取和修改,只能在类的内部使用,在派生类中无法访问;protected成员也不能被外部访问与修改,只能在内部使用,但是在派生类中将作为private成员使用.所以如果在定义类时,能够访问的就用public定义,不能访问就用protected定义.
接下来说说派生类.类的定义过程中你可能可能会发现有些东西会重复,比方说在定义了一个学生信息的类之后又要定义一个记录分数的类.如果用类里面套一个类会很麻烦,输入学生信息要用两个点,而重新构造类更麻烦了.所以C++提供了一个解决方案——派生类.
派生类继承了基类中所有的东西,把protected转换为private.
class stu{protected:string name, birthday;int num;public:void print_data(){cout << "name: " << name << '\n';cout << "number: " << num << '\n';cout << "birthday: " << birthday << '\n';}};
这个是学生信息类.那么现在可以定义一个以它为基类的派生类score:
class score:public stu{protected:int score;};
这样定义之后score类的对象将能够访问基类stu中的成员,并且加入成员score.
下面剩下一个构造函数与析构函数了.很多情况下我们需要在类对象创建的时候就执行一些代码.所以就有了构造函数与析构函数.
构造函数是在类对象定义时由程序自动执行,一般用于初始化操作.析构函数是在对象被销毁时执行.析构函数一般是释放由构造函数申请的内存.构造函数名字和类名相同,不能有返回值,可以含参数,可以重载.析构函数命名则是在构造函数前加一个~.比如:
class stu{protected:int num;string name, birthday;public:stu(){num = 0;name = "";birthday = "";}stu(int _num, string _name, string _bir){num = _num;name = _name;birthday = _bir;}~stu(){}};
上面这个类在定义时如果没有给对象传入参数则令num为0,name与birthday为空.传递参数的方法是在对象后面加一个括号传入参数.比如:
就等于给类中的构造函数传递参数,那么现在对象s中的num为123,name为"Xiaoming",birthday为"1900.1.1".
- 类-Classes
- 异常类exception classes
- C#类(Classes)
- C#类(Classes)
- 总索引Classes 类
- Nested Classes嵌套类
- domain classes领域类
- 类声明 classes
- 过滤器类Filter Classes
- TypeScript 类(Classes)
- 匿名类Anonymous Classes
- 类(Classes)
- classes 类2
- Classes
- Kotlin-16.嵌套类/内部类(Nested Classes/Inner classes)
- 持久化类(Persistent Classes)
- CSS 伪类 (Pseudo-classes)
- 集合类(collection classes)
- 透明COM容器控件原理
- Content provider 中getPathSegments用途
- Delphi 数据类型列表
- POJ 1833 排列
- IT人的工作经验
- 类-Classes
- 始于脚下
- hdu 1160 FatMouse's Speed
- VIM代码块对齐
- 解决泛泰A850L编译CM10.2(android4.3)自带相机没有1300w分辨率选项的方法
- 关于sql语句的执行顺序问题
- 获得两字符串的最长公共子字符串
- ContentUris及withAppendedId()和parseId()
- Android呼出电话流程(原)