从C到C++快速入门(8. 类和对象)

面向对象编程

  • 传统的过程式编程:变量(对象)就是一些存储数据的内存块,而过程(函数)对这些数据进行处理 --> 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’ ;
}

发布了41 篇原创文章 · 获赞 1 · 访问量 491

猜你喜欢

转载自blog.csdn.net/weixin_44773006/article/details/103333146