- C++的三大特征:封装、继承、多态
封装:
封装可以隐藏实现细节,使得代码模块化
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。
在面向对象编程上可理解为:把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏
所有的 C++ 程序都有以下两个基本要素:
- 程序语句(代码):这是程序中执行动作的部分,它们被称为函数。
- 程序数据:数据是程序的信息,会受到程序函数的影响。
封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一个概念,这样能避免受到外界的干扰和误用,从而确保了安全。
C++中提供了三个访问限制符public、protected、private
本类中 子类中 友元类 /友元函数 非子类/非友元类/非友元函数
public √ √ √ √
protected √ √ √ ×
private √ × √ ×
在class中如果没有声明变量或函数是哪种访问限制符,默认是private
区别struct :C++中,struct也当做类来处理,但struct中如果没有声明变量或函数是哪种访问限制符,默认是public
例:
#include<iostream>
class Circle{
void show()
{
std::cout<<"Circle"<<std::endl;
}
};
struct Node{
void play()
{
std::cout<<"Node"<<std::endl;
}
};
int main()
{
Circle c;
c.show();
Node d;
d.play();
return 0;
}
编译:
- this指针
this指针是类的成员函数的一个隐藏参数,当对象调用成员函数时,this指针指向当前调用此函数的对象
this指向可以发生改变吗?
例:
class Circle{
public:
Circle(double r=0)
{
this->r=r;
}
void show()
{
Circle r1;
this=&r1;
std::cout<<"Circle"<<std::endl;
}
private:
double r;
};
int main()
{
Circle c;
c.show();
return 0;
}
编译:
Circle的构造函数(与类同名)可见在并没有传递this这个参数,我们在函数中就能调用this
show()函数可见this指针的指向不能发生改变,所以它的类型应该为:类名 *const this,说明this是一个常量,必须初始化
普通的成员方法依赖于对象调用,因为有this指针指向调用该成员函数的对象,完成this的初始化,否则不符合C++中常量的定义。
区别:static修饰的成员函数,C++中static修饰的成员函数称为静态成员函数,它没有this指针,所以可以不依赖对象调用,
调用:类名::函数名(形参列表) 或者 对象名.函数名(形参列表) 调用静态成员函数
类的成员函数在类内或者类外都能实现,
区别:在类内实现时默认是内联函数
在类外实现是普通函数