C与C++的不同点
- C++在struct,union中定义的函数叫成员函数,在class中定义的数据叫数据成员
- C++引入了三个存取权限的关键字:public,protected,private
public:表示数据成员或成员函数是公有的
protected:表示数据是受保护的。不允许其他的程序对其进行直接存取,只能通过他所在的成员函数进行存取
private:表示数据是私有的。与protected一样成员访问控制 public protected private 类自身 yes yes yes 派生类 yes yes no 其他类 yes no no
注意:private与protected的区别:private的数据是不可被继承的;protected的数据是可以被继承的基类成员访问控制 继承访问控制 在派生类中的访问控制 publilc public public protected protected private 不可访问 publilc protected protected protected protected private 不可访问 publilc private private protected private private 不可访问 - C++中可以把结构体名当做数据类型来使用
struct Student{char name[20];} Student stu;//定义Student类型的变量 - struct关键字定义的数据成员或数据函数缺省时是public;class关键字定义的数据成员或成员函数缺省是private。用union定义的类其所有的成员都是public,这种安排是不可以改变的,它不能使用存取限定符来进行修饰数据权限
- C++中定义参数可以带缺省参数。带缺省参数的函数调用时,如果缺省参数中没有给值,则将缺省值赋值给参数变量
//定义了缺省参数的函数 int fun(int x,int y,int z = 100);
注意:带有缺省值的参数必须放在参数列表的尾部
作用域限定符
代码:
C++继承
概念:如果B类是由A类继承而来的,那么把B类叫作派生类,A类叫作基类
单继承
单继承语法:
class 派生类名 : 继承方式{
//定义类实体
}
示例图:
多继承
多继承语法:
class 派生类名 : 继承方式1 基类名1,继承方式2 基类名2,...{
//定义类实体
};
示例图:
C++重载
重载运算符
概念:对已有的运算符进行重新定义其功能
| 可重载运算符 | 不可重载运算符 |
| 双目运算符(+,-,*,/,%) | .(成员访问运算符) |
| 关系运算符(==,!=,>,<,>=,<=) | .* , ->*(成员指针访问运算符) |
| 逻辑运算符(||,&&,!) | ::(域运算符) |
| 单目运算符(+(正),-(负),*,&) | sizeof |
| 自增(++),自减(--) | ?: |
| 位运算符(|,&,~,^,<<,>>) | #(预处理符号) |
| 赋值运算符(=,+=,-=,*=,/=,&=,|=,...) | |
| 空间申请与释放(new,delete,new[],delete[]) | |
| 其他运算符(()(函数调用),->(成员访问),,(逗号),[](下标)) |
示例图:
重载函数
概念:在一个类中定义多个相同名字的函数,但是参数列表或参数个数不相同的方法
示例图:
C++成员函数
成员函数的实现:在类定义的内部或外部实现函数。前者称为内联成员函数,后者称为外部成员函数
内部实现:
class A{
private:
int x;
int y;
public:
//定义内联函数
int getX(){return x;}
int getY(){return y;}
}
外部实现:
class B{
protected:
int x;
public:
void setX(int x);
int getX();
}
//外部实现
void B::setX(int x){
this->x = x;
}
int B::getX(){
return this->x;
}
C++构造函数与析构函数
概念:构造函数是在建立对象时被调用的;析构函数是在删除对象前被调用的
内部定义:
外部定义:
示例图:
调用基(父)类函数
问题:如果想在派生类中使用基类中的函数(这里的函数是指与派生类的函数名相同,但是是功能不同的函数)我们该怎么做呢??
代码:
示例图:
派生类的构造函数实现及执行过程
代码:
示例图:
C++构造函数、析构函数与普通函数的区别
- 构造函数的名字必须与类名相同;析构函数的名字是以波浪号(~)开头加类名组成的。
- 当建立对象时或复制对象时,构造函数会被自动调用;当删除对象前,析构函数会被自动调用。
- 构造函数与构造函数都无返回值。
- 构造函数与析构函数都无法被继承,但是派生类可以调用基类的构造函数
- 构造函数允许重载,有自己的默认参数和初始化列表
- 构造函数不可以是虚函数;析构函数可以是虚函数
- 析构函数不接受任何参数,没有返回值,没有任何值要说明
C++动态对象
概念:在C++ 中提供了动态申请和释放内存空间的两个关键字,分别是new(申请),delete(释放)。
语法:
new 数据类型;
delete 指针变量;
注意:new申请内存地址空间成功时,返回对象的指针;若申请失败,则返回空指针(NULL)
代码: