C++类的引入源于struct结构体的功能不健全,两者之间的区别之一:对于内部成员变量和成员函数访问权限的控制。
struct默认内部的成员变量和成员函数均为public,可供外部进行访问。
class默认内部的成员变量和成员函数均为private,不可供外部进行访问。
控制访问的权限有三种:
private:私有的,只可内部进行访问。
public:公有的,外部也可进行访问。
pretected:保护的,子类可访问,外部仍不可访问。
对于一个类实例化一个对象,会自动调用构造函数进行赋值。由于类的名称是唯一的,因此构造函数的名称设定为类名,无返回值。
C++规定每个类必须有一个构造函数,否则无法创建对象。如果自己定义了有参数的构造函数,系统不再默认创建无参数的构造函数,用户需要使用需自己定义。
析构函数无返回值,无参数,一个类只允许有一个析构函数。
class Point{
int x;
int y;
public:
Point(){
x=0;
y=0;
}//无参构造函数
Point(int a,int b){
x=a;
y=b;
}//有参构造函数
~Point(){}//析构函数
void output(int x,int y){
This->x=x;
This->y=y;
count<
};
类不占有物理内存,对象占有物理内存。
函数重载:不同参数类型,不同参数个数
void Point(int a,int b=10){}
void Point(int a){}//不是函数重载
类中隐含This指针,指向对象本身。
继承:
基类 class animal{};
子类 class fish : public animal{};
基类 继承方式 子类
public public
pretected public pretected
private 无权限
public pretected
pretected pretected pretected
private 无权限
public private
pretected private private
private 无权限
先调用基类构造函数,再调用子类构造函数
先调用子类析构函数,再调用父类析构函数
函数的覆盖发生在父类与子类之间
基类的构造函数是有参数的,子类的构造函数是无参数的,需如下编写子类构造函数:
Fish():Animal(300,200){}
多态性:
当C++编译器在编译的时候,发现某个类的某个函数是虚函数,采用迟绑定的技术,在运行时,依据对象的类型来确认调用的哪一个函数。
基类 virtual void eat(){}。传递子类地址,子类有该函数,调用子类,子类没有该函数,调用父类。
没有函数体的虚函数为纯虚函数,virtual void eat()=0;含有纯虚函数的类为抽象类,是不可以实例化对象的。
子类不具体实现纯虚函数,子类也为抽象类。
int a=6;
int &b=a;//对a的引用,引用需赋初始值
引用多用于函数传参,由于共用一片内存,防止了值拷贝
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23366483/viewspace-668406/ ,如需转载,请注明出处,否则将追究法律责任。