目录
1.面向过程和面向对象初步认识
面对过程的语言最为典型的就是C语言等
面对对象的语言典型的有C++、java、python等
那么什么是面对过程和面对对象,他们之间又有什么区别?
面对过程:关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。
面对对象:基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。
举例:做一份西红柿炒蛋
面对过程:我需要先切好西红柿,起锅加油,倒入西红柿,加鸡蛋,调味,煮熟,盛出。
面对对象:我需要做一份西红柿炒蛋,对象有锅、西红柿、鸡蛋,对于西红柿我需要先洗好切好,对于锅我需要起锅倒油。在整个过程中,锅不需要管西红柿和鸡蛋是什么状态,只需要关注自己,西红柿,鸡蛋也是!
2.类的引入
C语言的结构体成员是成员变量;
struct Date
{
int year;
int month;
int day;
};
对于C++ 新增了一个关键字 class(类) 与C语言的 struct 最明显的区别就是 类 不仅可以有成员变量,也可以有成员函数。.
#include<iostream>
using namespace std;
class Date
{
int GetMonthDay(int year, int month) {
static int GetMonDayArr[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)) {
return 29;
}
return GetMonDayArr[month];
}
Date(int year = 1900, int month = 1, int day = 1)
{
_year = year;
_month = month;
_day = day;
++N;
}
void print()
{
cout << "年:" << _year << " 月:" << _month << " 日" << _day << endl;
}
static int GetN() {
return N;
}
private:
int _year;
int _month;
int _day;
static int N;
};
显而易见:上面的Date类的成员有四个成员变量和四个成员函数
在C++中的class大部分情况下可以用struct进行替换但是大多数情况下依旧使用class进行类的定义。如何定义,看下一小节!
3.类的定义
class className //类名
{
// 类体:由成员函数和成员变量组成
}; // 一定要注意后面的分号
类的构成:
class是关键字,classname是类名,{ }中定义成员函数和成员变量,切记不要忘记在{}后面还有一个分号 ;
我们定义一个日期类作为示范
#include<iostream>
using namespace std;
class Date
{
void print()
{
cout << "年:" << _year << " 月:" << _month << " 日" << _day << endl;
}
private:
int _year;
int _month;
int _day;
};
上述情况是将成员函数在类中定义时直接写出,我们也可以将定义和声明分离
#include<iostream>
using namespace std;
class Date
{
void print();
private:
int _year;
int _month;
int _day;
};
void Date::print()
{
cout << "年:" << _year << " 月:" << _month << " 日" << _day << endl;
}
需要注意的点是,在类外定义需要在函数返回值后,在函数名前加上 是在哪个类上的成员函数,也就是加上 Date::
成员变量的命名规则:
1.需要注意的另外一个点是,为了避免成员变量和成员函数中的形参重名,在C++中一般在成员变量前加一个下划线,带有下划线表示是成员变量,例如上面的代码中_year,_month,_day;
2.如果成员变量和成员函数的形参依旧重合了就需要使用this指针 通过 this._year 表示是成员变量(一般Java中常用,C++中常用下划线作为成语变量的标志)
4.类的访问限定符及封装
4.1类的访问限定符

访问限定符有:public、protected、private三种 对应的访问权限如下。
public : 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问
protected : 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问
private :只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问。
现阶段的对于访问限定符不能做到完全理解所以可以简要的理解为
public是在类外也可以访问和修改 privated不可以在类外进行访问和修改
protected是被保护的类型 不可以在类外随意的修改和访问,只有特定的情况可以进行访问和修改
其次,如果不加访问限定符,规则:class的默认访问权限为private,struct为public
一个访问限定符的作用域则为,这个访问限定符的:冒号开始到下一个访问限定符的出现为止,之间的成员都受到这个访问限定符的控制
4.2封装
现阶段初步了解封装的概念,
封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来 和对象进行交互(主要体现在访问限定符上的作用,让能看见的看见,让不能对别人公开的隐藏)
5.类的作用域
类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员时,需要使用 :: 作用域操作符指明成员属于哪个类域。
#include<iostream>
using namespace std;
class Date
{
void print();
void printed()
{
cout << "年:" << _year << " 月:" << _month << " 日" << _day << endl;
}
private:
int _year;
int _month;
int _day;
};
void Date::print()
{
cout << "年:" << _year << " 月:" << _month << " 日" << _day << endl;
}
6.类的实例化
我们可以初步理解”类“是一个模型,例如要得到一个水杯,我们就需要水杯模型,这个模型就叫做类,通过这个模型造出来的水杯,就是这个模型的实例化对象。
#include<iostream>
using namespace std;
class Date
{
public:
void print();
void printed()
{
cout << "年:" << _year << " 月:" << _month << " 日" << _day << endl;
}
private:
int _year;
int _month;
int _day;
};
void Date::print()
{
cout << "年:" << _year << " 月:" << _month << " 日" << _day << endl;
}
int main()
{
Date d;
}
Date d; 类名 类对象名。
这样我们就实例化对象了一个d,这个d中有三个成员变量和两个成员函数
访问d的成员则需要用到 . 来进行访问,但是三个成员变量受到privated的影响所以不能访问,两个成员函数可以被访问 举例如下:
#include<iostream>
using namespace std;
class Date
{
public:
void print();
void printed()
{
cout << "年:" << _year << " 月:" << _month << " 日" << _day << endl;
}
private:
int _year;
int _month;
int _day;
};
void Date::print()
{
cout << "年:" << _year << " 月:" << _month << " 日" << _day << endl;
}
int main()
{
Date d;
d.print();
d.printed();
}
C++面向对象编程基础讲解

被折叠的 条评论
为什么被折叠?



