面向对象编程
- 传统的过程式编程:变量(对象)就是一些存储数据的内存块,而过程(函数)对这些数据进行处理 --> C语言
- 面向对象编程:程序是由不同种类的许多对象相互协作完成的。对象之间通过发送/接受消息来协作完成各种任务。由这些对象构成的程序也成为“对象式系统".
- 过程式编程:用内在类型(概念)如int、double表示数据,用面向这些机器类型的概念去解决复杂问题,不易于思考问题
- 面向对象编程:用现实世界中的概念(人、车、图)来思考问题。更自然、更易于理解、易于查错、易于组装(组件式开发)
C++的面向对象特性:用户定义类型
-
程序员定义自己的“用户定义类型”如类类型,来表示各种应用问题中的各种概念。
-
C++标准库已经提供了很多实用的“用户定义类型”,是C++标准库的程序员实现的
- cout是一个ostream类的对象(变量),cin是一个istream的对象(变量)。可以向他们发送消息: cout << “hello world” ;
- string是一个表示字符串的类。向一个string对象发送一个size()消息,查询该对象包含的字符数目。string str = “hello world” ; cout<<str.size();
-
一个用户定义类型包括
- 有哪些属性?
- 有哪些操作(运算)?
- 不同属性或操作的访问权限?哪些是(类)外部可以访问?哪些是仅仅内部才能访问的?
-
面向对象设计要考虑多个用户定义类型的关系
- 不同类型的对象之间是继承还是包含关系?
-
程序:哪些具体对象如何进行交互协作
类和对象
-
用struct或class关键字定义一个类。定义的类就是一个数据类型。
struct student{
string name;
double score;
};
// 包含关系: 一个student对象包含了string类型的name和double类型的score成员 -
类类型的变量通常成为对象。如:
-
student stu; //对象就是类的一个实例
成员访问运算符
- 访问类对象的成员
stu.name = “LiPing” ;
stu.socre = 78.5;
对象数组
- 和内在一样,可以定义类类型的数组。存储一组类对象。
student students[3];
students[0].name = “LiPing” ;
students[0].score = 60.5;
类类型的指针变量
- T是一个类类型,则T * 就是T指针类型。如int * 是int指针类型。
- T * 变量可以指向一个类对象。
student stu;
student *p = &stu;
student students[3];
p = students + 2; //指向第3个student对象
间接访问运算符 -> 、 去内容运算符 *
student stu;
student *p = &stu;
(*p).name = “LiPing” ; // *p就是p指向的变量stu
p->score = 78; // p指向的类对象的成员score
student students[3];
p = students + 2; // 指向第3个student对象
p->name = “Wang Wei”
指向可以指向动态分配的对象
student *p = new student;
p->name = “Wang” ;
delete p; //不需要的内存块要及时释放
p = new student[3]; // p指向3个student的内存块的起始地址
p[1].score = 67;
*(p+1).score = 67;
p->score = 78;
类的成员函数
struct student{
string name;
double score;
void print(){ cout << name << " " << score << ‘\n’;}
};
int main(){
student stu;
stu.print();
}
类体外定义成员函数
struct student{
string name;
double score;
void print(); //函数的声明
};
void student::print(){ //函数的实现 , 记得加 student::
// 表示 print为 student的成员函数
cout << name << " " << score << ‘\n’ ;
}