1.面向对象
(1)对象
客观世界的任何事物都可以看成一个 对象
。在C++中,对象是类的实例。对象由 数据
(属性)和 函数
(行为)两部分构成。
(2)封装
封装性
的含义:一是将有关的数据和函数封装在一个对象之中,形成一个基本单位,各对象之间相互独立,互不干扰。二是将对象中的某些部分对外隐藏,即隐藏其内部细节,只留下少数接口,以便与外界联系,接收外界消息,实现了 信息隐藏
。
(3)抽象
抽象
的作用是用来表示同一事物的本质。类是对象的抽象,而对象则是类的实例。
(4)继承
基类可以被继承,继承出来的类成为 子类或派生类
。C++通过继承的方式,使得新建的类可以从基类中继承大部分方法函数,大大减少编程工作量,实现了软件重用,体现了 重用性
。
(5)多态性
在C++中, 多态性
指:由继承而产生的相关的不同的类,其对象对同一消息会作出不同的响应。
2.类的声明和对象的定义
(1)类的声明
class 类名
{
public:
公有的的数据和成员函数;
private:
私有的数据和成员函数;
};
例如:
class Student
{
public:
void display()
{
cout<<"num"<<num<<endl;
cout<<"name"<<name<<endl;
cout<<"sex"<<sex<<endl;
}
private:
int num;
char name[20];
char sex;
};
类的定义包括 类头
和 类体
,类头由关键字class和类名组成,类体是由一对花括号包括起来的。
private和public称为 成员访问限定符
(number access specifier),被声明为 私有的(private)
的成员,只能被本类中的成员函数引用,类外不能调用(友元类除外)。被声明为 公有的(public)
的成员,既能被本类中的成员函数引用,也能被类的作用域内的其他函数引用。还有一种成员访问限定符为 protected(受保护的)
,用protected声明的成员,不能被类外访问,但可以被派生类的成员函数访问。private、public和protected出现的先后没有顺序要求,一般先声明public,再声明private。
注意:
在C++中,如果在类中既不指定private,也不指定public,则系统默认为私有的(private)
。在C语言中,用struct声明的类,系统默认成员为公用的(public)。
(2)定义对象
<1>先声明类类型,再定义对象
类名 对象名;
class Student
{
public:
***
private:
***
};
Student stud1, stud2;
<2>在声明类的同时定义
class Student
{
public:
***
private:
***
}stud1, stud2;
注意:
常用第一种,不常用的没有列出来。
3.类的成员函数
(1)成员函数定义
<1>在类内
class Student
{
public:
void display()
{
cout<< *** <<endl;
}
private:
***
};
<2>在类外
class Student
{
public:
void display();
private:
***
};
void Student::display()
{
cout<< *** <<endl;
}
::
是 作用域限定符
(field qualifier)或称作用于运算符,用它声明函数是属于哪个类的。
注意:
类函数必须现在类体中作原型声明,然后在类外定义,即函数定义是在类体定义之后。
(2)内置成员函数(inline)
为了减少时间开销,如果在类体中定义的成员函数中不包括循环等控制结构,C++系统会自动地对它们作为 内置(inline)
函数来处理。在调用内置成员函数时,并不是真正地执行函数的调用过程(如保留返回地址等处理),而是把函数代码嵌入程序的调用点,这样大大减少调用成员函数的时间开销。
class Student
{
public:
inline void display();
private:
***
};
inline void Student::display()
{
cout<< *** <<endl;
}
注意:C++要求一般的内置函数要用inline关键字声明,但对类内定义的成员函数,可以省略inline,这些成员函数已被隐含指定为内置函数。 在类体外定义的应当用inline作显示声明
(一般在类外定义的成员函数规模很小而调用频率高的时候,才指定为内置函数) 。
(3)成员函数的存储
同一类的不同对象,一般数据成员不同,而成员函数相同。因此,在存储上,每个对象所占用的存储空间只是该对象的数据成员所占用的存储空间,而不包括函数代码所占用的存储空间。
注意:不要将inline与存储空间联系, inline函数只影响程序的执行效率,而与成员函数是否占用对象的存储空间无关
。
4.对象的引用
<1>通过对象名和成员运算符访问对象中的成员
stud1.age;
stud1.display();
<2>通过指向对象的指针访问对象中的成员
Student stud3, *p;
p = &stud3;
stud3.age;
stud3.display();
p->age;
p->display();
(*p).age;
(*p).display();
注意: (*p)就是stud3, stud3.age、p->age和(*p).age,三者等价
。
<3>通过对象的引用来访问对象中的成员
Student stud4;
Student &stud5 = stud4;
stud5.age;
stud5为stud4的 引用
,两者共占同一存储单元。
5.类声明和成员函数定义的分离
一个C++程序是由三部分组成:
(1)类声明头文件(后缀为.h或无后缀);
(2)类实现文件(后缀为.cpp),包括类成员函数的定义;
(3)类的使用文件(后缀为.cpp),即主文件。
student.h:
#include <iostream>
#include <string>
using namespace std;
class Student
{
public:
void display();
private:
int num;
string name;
char sex;
};
student.cpp:
#include "student.h"
void Student::display() {
cout<<num<<endl;
cout<<name<<endl;
cout<<sex<<endl;
}
main.cpp:
#include "student.h"
int main(){
Student stud;
stud.display();
return 0;
}
注意:
student.h放在当前目录中,因此用一对双引号包起来,而不是一对尖括号。