目录
类的基本概念、类成员函数、类访问修饰符、构造函数&析构函数、C++拷贝构造函数、C++友元函数、C++中的this指针、C++中指向类的指针、C++类的静态成员
一、类的基本概念
- 类是把属性和方法进行封装,同时对类的属性和方法进行访问控制(类可以把自己的属性和方法只让可信的类或者对象操作,对不可信的进行信息的隐藏)
- 类是由我们根据客观事物抽象而成,形成一类事物,然后用类去定义对象,形成这类事物的具体个体。
- 类是一个数据类型,类是抽象的,而对象是一个具体的变量,是占用内存空间的。
- 面向对象的编程技术开发程序有两个步骤:定义一个有属性和方法的类(模板)、为该类创建一个变量(实现);
# include<iostream>
using namespace std;
/* 抽象一个圆类,并对圆的属性和方法进行封装 */
class Circle /*类定义以关键字class开头,后跟类的名字*/
{ /*类定义后边必须跟着一个分号或者一个声明列表*/
public: /*public、private、protected用来定义类成员的访问属性*/
double r; /* 圆类的半径属性 */
};
int main()
{
Circle Circle1; /*声明类的对象,声明Circle1,类型为Circle*/
Circle1.r = 1.0;
cout << "半径为" << r << endl;
return 0;
}
二、C++类成员函数
1、类的成员函数是类的一个成员(类成员变量—属性,类成员函数—方法,变量、函数都是类的成员,
),它可以操作类的任意对象,可以访问对象中的所有成员。
2、成员函数可以在类定义内部定义,或者单独使用范围解析运算符::在类外部来定义,在::之前必须使用类名,在类外部定义成员函数时需在类内部先做声明;
3、调用成员函数是在对象上使用点运算符,如:Circle1.getArea(2.0);
# include<iostream>
using namespace std;
/* 抽象一个圆类,并对圆的属性和方法进行封装 */
class Circle
{
public:
double radius;
void setR(double r) /*类定义内部定义成员函数*/
{
radius=r;
}
double getArea(void); /*在类外部定义成员函数时,一定要在类里边重新声明下该函数是类的成员*/
};
double Circle::getArea(void) /*类外部通过范围解析运算符::定义成员函数*/
{
return 3.14*radius*radius;
}
int main()
{
Circle Circle1; /*声明Circle1,类型为Circle*/
double area=0.0;
Circle1.setR(2.0);
area=Circle1.getArea();
cout<<"Circle1的面积:"<<area<<endl;
getchar();
return 0;
}
三、C++ 类访问修饰符
C++提供了一种用来保护类里的方法和属性的手段,即访问控制。
1、类成员的访问限制是通过类主体内部对各个区域标记public protected private来指定的。关键字 public、protected、private被称为访问修饰符;
2、一个类可以有多个public、protected或private标记区,每个标记区域在下一个标记区域开始之前或者在遇到类主体结束右括号之前都是有效的,成员和类的默认访问修饰符是private。
3、公有成员在程序中类的外部是可以访问的,可以不使用任何成员函数来设置和或许公有变量的值,
# include<iostream>
using namespace std;
/* 抽象一个圆类,并对圆的属性和方法进行封装 */
class Circle
{
public:
double radius;
void setR(double r)
{
radius=r;
}
double getArea(void);
};
double Circle::getArea(void)
{
return 3.14*radius*radius;
}
int main()
{
Circle Circle1; /*声明Circle1,类型为Circle*/
double area=0.0;
Circle1.setR(2.0);
area=Circle1.getArea();
cout<<"Circle1的面积:"<<area<<endl;
Circle1.radius=1.0; /*因为radius是公有的,外部对象可直接调用并赋值*/
area=Circle1.getArea();
cout<<"Circle1的面积:"<<area<<endl;
getchar();
return 0;
}
输出的结果是:
4、 私有成员变量或函数在类的外部是不可访问,甚至是不可查看的,只有类和友元函数可以访问私有成员。默认情况下,类所有的成员都是私有的;一般情况下,会在私有区域定义数据,在公有区域定义相关的函数,以便在类的外部也可以调用这些函数;
# include<iostream>