一、综述:类是自己定义的数据类型(新类型)
设计类时要考虑的角度:
(1)站在设计和实现者的角度来考虑;
(2)站在使用的角度来考虑;
(3)父类,子类的问题;
二、类基础
(1)一个类就是一个用户自己定义的数据类型,我们可以把类想象成一个命名空间,包着一堆东西
(成员函数,成员变量);
(2)一个类的构成:成员变量,成员函数(有许多特殊的成员函数,后续慢慢讲解)
(3)我们访问类成员的时候,如果是类对象,我们就使用 对象名.成员名 来访问成员
如果是指向这个对象的指针,我们就用 指针名->成员名 来访问成员
class student {
public:
int number;
char name;
};
student someone;//定义类对象
someone.number = 10000;
student* psomeone = &someone;
psomeone->number = 1005;
cout << someone.number << endl;//1005
(4)public成员提供类的接口,暴露给外界,供外界调用。private成员提供各种实现类的功能的细节方法,
但不暴露给使用者,外界无法使用这些private成员
(5)struct 是成员默认为public的class; struct A{.....}
(6)calss成员默认是private(私有);class A{......}
struct A{.....}等价于:
class A{public:......}
三:成员函数
类在定义的时候,可以多次定义,如你在Time.cpp中定义,然后又在ConsoleApplication中定义不会报错
Time.h文件 #ifndef _MYTIME_ #define _MYTIME_ class Time//定义一个时间类 或类声明 { public: int hour;//小时 int minute;//分钟 int second = 0;//类内初始化 //int second;//秒 const int ctestvalue = 80;//定义一个成员常量 //成员函数: void initTime(Time& stmptime, int tmphour, int tmpmin, int tmpsec); }; #endif Time.cpp文件 #include<iostream> #include"Time.h" //成员函数initTime()的实现 //其中这两冒号::叫 作用域运算符,表示initTime函数属于Time类 void Time::initTime(Time& stmptime, int tmphour, int tmpmin, int tmpsec) { /*stmptime.hour = tmphour; stmptime.minute = tmpmin; stmptime.second = tmpsec;*/ hour = tmphour;//我们注意到,在成员函数中,我们可以直接使用成员函数变量名 //哪个对象调用的该成员函数,这些成员变量就属于哪个对象, //大家可以理解成类成员函数知道哪个对象调用自己 minute = tmpmin; second = tmpsec; initMillTime(0); } ConsoleApplication.cpp文件 #include<iostream> #include<string> #include<vector> #include"Time.h" int main() { // 类在定义的时候,可以多次定义,如你在Time.cpp中定义, //然后又在ConsoleApplicatio中定义不会报错 Time mytime;//类对象 mytime.initTime(mytime, 11, 14, 5); cout << mytime.hour << endl; cout << mytime.minute << endl; cout << mytime.second << endl; }
四、对象的拷贝
对象本身可以拷贝的 如下:
默认情况下,这种类对象的拷贝,是每个成员变量的逐个拷贝。
如果在类Time中我们定义适当的 “赋值运算符” 就能控制对象的这种拷贝行为。
Time myTime;//类对象 myTime.hour = 12; myTime.minute = 15; myTime.second = 16; Time myTime2 = myTime; Time myTime3(myTime);//int a=4;int b(a); Time myTime4{ myTime }; Time myTime5 = { myTime }; myTime5.hour = 8;
五、私有成员
Time.h文件 #ifndef _MYTIME_ #define _MYTIME_ class Time//定义一个时间类 或类声明 { private: int Millsecond;/*毫秒*/ private: void initMillTime(int mls); } #endif Time.cpp文件 #include<iostream> #include"Time.h" using namespace std; void Time::initMillTime(int mls) { Millsecond = mls;//成员函数可以访问成员变量,不管成员是公有public还是私有private } ConsoleApplication.cpp文件 #include<iostream> #include<string> #include<vector> #include"Time.h" int main() { Time mytime; mytime.hour = 5; mytime.millsecond = 10000;//private: millsecond 私有的不能直接,成员变量名引用 mytime.initMillTime(0);不能访问私有成员函数 return 0; }