类的详细介绍
2016-05-29 20:33
183 查看
[b]类[/b]
[b] 这个概念,学过java的人们肯定不陌生。因为java本来就是用类的思想实现的。[/b]
[b] 我在一开始学类和对象的时候,总是问别人:为什么要有类这个语法?[/b]
[b] 而他们总是回答我: 因为类这个东西,是人们写着写着代码而逐渐产生的一种东西。我也不知道这样说对不对,反正他们说c++难就难在这块上面,就像继承与派生,都是人们通过生活演化而来的。[/b]
对象是具有类类型的。
类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类
是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。
比方说,一类人,就可以定义为一个类(class Person),而人能干什么呢?
人能说话
人能睡觉
人能看书
........
人有年龄
人有性别
人有名字
........
这些,就是这个Person(人)类的成员,年龄,性别,名字要定义:
View Code
那么,怎么调用函数呢?
在继承类里面,调用基类的public函数往往如下调用:
Person::Regsiter();
而在int main()函数里面,则可以定义:
Person P;
p.Regsiter();
注意:以上只是普通public函数的调用方法,后面还有继承和派生、构造函数的调用方法。
stud1.num=1001;//假设num已定义为公用的整型数据成员
表示将整数1001赋给对象stud1中的数据成员num。
其中“.”是成员运算符,用来对成员进行限定,指明所访问的是哪一个对象中的成员。
注意不能只写成员名而忽略对象名。
访问对象中成员的一般形式为: 对象名.成员名
不仅可以在类外引用对象的公用数据成员,而且还可以调用对象的公用成员函数,但同样必须指出对象名,如
stud1.display( );//正确,调用对象stud1的公用成员函数
display( );//错误,没有指明是哪一个对象的display函数
由于没有指明对象名,编译时把display作为普通函数处理。
应该注意所访问的成员是公用的(public )还是私有的(private )。只能访问public成员,而不能访问private成员,如果已定义num为私有数据成员,下面的语句是错误的:
stud1.num=10101;//num是私有数据成员,不能被外界引用
在类外只能调用公用的成员函数。在一个类中应当至少有一个公用的成员函数,作为对外的接口,否则就无法对对象进行任何操作。
简单程序举例:
[b]设计Person类[/b]
题目内容:
设计一个Person类,包含name、age、sex属性以及对这些属性操作的方法。实现并测试这个类。
根据类的封装性要求,把name、age、sex声明为私有的数据成员。
声明公有的成员函数Register()、ShowMe()来访问这些属性,在Register()函数中对数据成员进行初始化。
person1通过cin来得到信息,person2通过Register("Zhang3",
19, 'm') 来得到信息。
输入格式:
person1的信息
输出格式:
person1和person2的信息
输入样例:
Li4 18 f
输出样例:
Li4 18 f
Zhang3 19 m
时间限制:500ms内存限制:32000kb
代码:
[b] 这个概念,学过java的人们肯定不陌生。因为java本来就是用类的思想实现的。[/b]
[b] 我在一开始学类和对象的时候,总是问别人:为什么要有类这个语法?[/b]
[b] 而他们总是回答我: 因为类这个东西,是人们写着写着代码而逐渐产生的一种东西。我也不知道这样说对不对,反正他们说c++难就难在这块上面,就像继承与派生,都是人们通过生活演化而来的。[/b]
1.类和对象的定义
类是现实世界或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起。对象是具有类类型的。
类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类
是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。
比方说,一类人,就可以定义为一个类(class Person),而人能干什么呢?
人能说话
人能睡觉
人能看书
........
人有年龄
人有性别
人有名字
........
这些,就是这个Person(人)类的成员,年龄,性别,名字要定义:
class Student { public : void display( ); //公用成员函数原型声明 private : //此处不一定要写private int num; string name; char sex; //以上3行是私有数据成员 }; void Student∷display( ) //在类外定义display类函数 { cout<<″num:″<<num<<endl; //函数体 cout<<″name:″<<name<<endl; cout<<″sex:″<<sex<<endl; }
View Code
那么,怎么调用函数呢?
在继承类里面,调用基类的public函数往往如下调用:
Person::Regsiter();
而在int main()函数里面,则可以定义:
Person P;
p.Regsiter();
注意:以上只是普通public函数的调用方法,后面还有继承和派生、构造函数的调用方法。
对象成员的引用
1.通过对象名和成员运算符访问对象中的成员
例如在程序中可以写出以下语句:stud1.num=1001;//假设num已定义为公用的整型数据成员
表示将整数1001赋给对象stud1中的数据成员num。
其中“.”是成员运算符,用来对成员进行限定,指明所访问的是哪一个对象中的成员。
注意不能只写成员名而忽略对象名。
访问对象中成员的一般形式为: 对象名.成员名
不仅可以在类外引用对象的公用数据成员,而且还可以调用对象的公用成员函数,但同样必须指出对象名,如
stud1.display( );//正确,调用对象stud1的公用成员函数
display( );//错误,没有指明是哪一个对象的display函数
由于没有指明对象名,编译时把display作为普通函数处理。
应该注意所访问的成员是公用的(public )还是私有的(private )。只能访问public成员,而不能访问private成员,如果已定义num为私有数据成员,下面的语句是错误的:
stud1.num=10101;//num是私有数据成员,不能被外界引用
在类外只能调用公用的成员函数。在一个类中应当至少有一个公用的成员函数,作为对外的接口,否则就无法对对象进行任何操作。
简单程序举例:
[b]设计Person类[/b]
题目内容:
设计一个Person类,包含name、age、sex属性以及对这些属性操作的方法。实现并测试这个类。
根据类的封装性要求,把name、age、sex声明为私有的数据成员。
声明公有的成员函数Register()、ShowMe()来访问这些属性,在Register()函数中对数据成员进行初始化。
person1通过cin来得到信息,person2通过Register("Zhang3",
19, 'm') 来得到信息。
输入格式:
person1的信息
输出格式:
person1和person2的信息
输入样例:
Li4 18 f
输出样例:
Li4 18 f
Zhang3 19 m
时间限制:500ms内存限制:32000kb
代码:
#include<iostream> #include<cstring> using namespace std; class Person { private://声明成员变量 char Name[20]; char Sex; int Age; public://声明成员函数 void Register(char *name,int age,char sex); //赋值函数 void ShowMe(); }; void Person::Register(char *name, int age, char sex) { //函数体 strcpy(Name,name); Age=age; Sex=(sex=='m'?'m':'f'); } void Person::ShowMe() { //输出函数,外界不能输出! cout<<Name<<" "<<Age<<" "<<Sex<<endl; } int age; char name[20],sex; int main() { Person person1,person2;//定义两个对象 cin>>name>>age>>sex; person1.Register(name,age,sex); person1.ShowMe(); person1.Register("Zhang3",19,'m'); person1.ShowMe(); }
相关文章推荐
- 初识python
- bzoj3196: Tyvj 1730 二逼平衡树
- Linux驱动开发、16-回环网卡驱动设计
- 《疯狂Java讲义》——解释型语言和编译型语言
- 【编程马拉松】【004-包含一】
- 数据结构学习笔记1——栈
- 冲刺第六天
- 进度条13
- 1014. 福尔摩斯的约会 (20)
- 我的大学
- 数据结构复习——线性表(二)链表
- 第十四周项目59-排序函数模板
- 吃透Javascript数组操作的正确姿势—再读《Js高程》
- bzoj1901: Zju2112 Dynamic Rankings
- python 中 正则表达式(Regular Expressions)学习
- 最新学习框架和语言
- bzoj 1803(主席树+dfs序)
- 设计模式(3)
- 新闻发布网页-1
- Windows中附加IP引起的网络悬案