C++C++自学旅程:类类型初识——类的定义
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++C++自学旅程:类类型初识——类的定义相关的知识,希望对你有一定的参考价值。
新年第一博,新年快乐!
一直不明白面对对象的“对象”是什么意思,想象不出;在学OC时出现了奇怪的语法,让程序“自己”运行;EDA的沙龙中提到了类类型,但不知道这是个什么鬼。终于这些问题的谜底要被我自己自学揭开了,哈哈哈!类类型我来啦!
类(Class)是一种自定义数据类型,是具有相同属性和行为的一组对象的集合,它是面向对象中最为重要的概念之一。类类型中有变量来存储属性和数据,叫做成员变量或数据成员,还有操作这些数据的函数,叫做成员函数。
类类型的作用:
-
- 实现封装
- 数据隐藏
- 继承和派生多态
- ……
使用类时,用户不需要了解类的具体实现,只需要通过外部接口,以特定的访问权限来使用类的成员即可。PS:由类类型声明的变量叫做对象,也就是说对象实际上就是变量。
以上还有很多看不懂的内容,慢慢学应该就会懂的。
类类型的声明用class关键字,格式跟struct一样。class类型的完整定义格式:
1 class 类名 2 { 3 public: 4 数据类型 成员变量名; 5 函数类型 成员函数名 (形参列表); 6 ...... 7 private: 8 数据类型 成员变量名; 9 函数类型 成员函数名 (形参列表); 10 ...... 11 protected: 12 ...... 13 }; //";"不要忘记了! 14 15 //成员函数的定义 16 函数类型 类名::成员函数名(形参列表) 17 { 18 函数体; 19 }
可以看出,类类型中有三种访问权限:公有访问权限(public)、私有访问权限(private)和保护访问权限(protected)。
①公共访问权限
在公共访问权限中的成员变量和成员函数可以从任何外部函数访问,比如d1.year。公有成员函数一般成为公有接口。
②私有访问权限
只能从该类的内部访问到的成员变量和函数,不能通过小圆点"."从外部函数访问,只能通过类里面定义的共有接口进行访问,这体现了C++面向对象编程的第一个特性:封装特性。
在成员函数的定义中,对该类的所有成员操作不必使用圆点运算符,即cin>>year;而不是cin>>d1.year。
③保护访问权限(还不懂)
一个类的派生类的成员函数可以直接访问继承该类的保护成员变量,而不能继承访问私有成员变量,这就是它与私有访问权限的不同。
成员变量如果是私有,那么需要公共接口来对数据进行输入输出,这就需要定义取值函数、赋值函数。上面讲了一大通,包括取值赋值函数怎么用?实例:
1 //类类型初试:日期比较 2 #include<iostream> 3 using namespace std; 4 class Date //定义类类型,Date为类型名 5 { 6 public: 7 void input(); //输入的公共接口 8 void output(); //输出的公共接口 9 int getyear(); //取值函数 10 int getmonth(); //取值函数 11 int getday(); //取值函数 12 private: 13 int year; //私有的成员变量 14 int month; 15 int day; 16 }d1,d2; //d1,d2是对象,也可以另外定义,如Date d1,d2; 17 void Date::input() 18 { 19 cout<<"请输入年、月、日:"<<endl; 20 cin>>year>>month>>day; //直接可以对year、month、day等私有变量进行操作 21 cout<<"输入完毕!"<<endl; 22 } 23 void Date::output() 24 { 25 cout<<year<<"年"<<month<<"月"<<day<<"日"<<endl; 26 } 27 int Date::getyear() 28 { 29 return year; 30 } 31 int Date::getmonth() 32 { 33 return month; 34 } 35 int Date::getday() 36 { 37 return day; 38 } 39 int compare() 40 { 41 if(d1.getyear()==d2.getyear()&&d1.getmonth()==d2.getmonth()&&d1.getday()==d2.getday()) //分别比较d1 d2的各项数据 42 { 43 cout<<"两个日期相同!"<<endl; 44 return 0; 45 } 46 else 47 { 48 cout<<"两个日期不同,它们分别是:"<<endl; 49 cout<<"d1:"; 50 d1.output(); 51 cout<<"d2:"; 52 d2.output(); 53 } 54 } 55 56 int main() 57 { 58 cout<<"类类型初试:比较日期!"<<endl; 59 d1.input(); 60 d2.input(); 61 compare(); 62 }
从上面这些东西就可以看出怎么用了。这个程序运行时:提示输入两个日期,然后比较两个日期是否一样,一样则输出一样,不一样则输出不一样且加上各自日期。
内联成员函数用于成员函数本身比较短小,功能简单但频繁使用(如取值赋值函数),有显式、隐式声明两种:
1 //显式内联函数 2 class Count 3 { 4 int t; 5 public: 6 void output(); 7 }; 8 inline void Count::output() 9 { 10 cout<<"小涛最帅!"<<endl; 11 } 12 13 //隐式内联函数 14 class Count 15 { 16 int t; 17 public: 18 void output() 19 { 20 cout<<"小涛最帅!"<<endl; 21 } 22 };
内联函数执行速度比一般函数速度要快,但是如果函数体过大,一般的编译器就会放弃内联,采用一般方式调用函数了。
再说一个this指针,它指的是目前调用的对象,一般写代码的时候省略了,其实真正是this->year = y;.....
使用的情景:
1 void Date::setDate(int year, int m, int d) 2 { 3 (*this).year=year; //(*this).year是数据成员year,year是形参year 4 }
以上是关于C++C++自学旅程:类类型初识——类的定义的主要内容,如果未能解决你的问题,请参考以下文章