C++全面精通类与对象攻略
什么是类和对象
在C++中,类(class)是一种自定义数据类型,可以用来描述具有相同属性和方法的一组对象。而对象(object)则是类的一个具体实例。
类是一个抽象的概念,它定义了数据类型的属性和方法,包括数据成员和成员函数,但并不占用内存空间。而对象则是类的一个具体实体,它占用实际的内存空间,可以使用类提供的属性和方法进行操作。
如何定义一个类
在C++中,定义一个类可以使用关键字class,语法格式如下:
class 类名{
访问权限:
成员变量1;
成员变量2;
...
public/private/protected:
成员函数1;
成员函数2;
...
};
其中,访问权限指的是类成员的访问权限,可以是public、private或protected。成员变量指的是类的数据成员,成员函数则是类的操作方法。
如何创建类的对象
在C++中,可以使用new运算符动态创建一个类的对象,也可以直接在栈上创建一个对象,语法格式如下:
类名 对象名; // 在栈上创建对象
类名* 对象指针 = new 类名(); // 动态创建对象
需要注意的是,在栈上创建的对象会在函数结束时自动删除,而动态创建的对象需要手动删除,否则会导致内存泄漏。
成员函数的定义和实现
在类中定义的成员函数可以分为两类:成员函数原型和成员函数实现。成员函数原型只是函数的声明,不包含函数体。而成员函数实现则包含函数体和实现细节。
class TestClass{
public:
int sum(int a, int b); // 成员函数原型
private:
int m_data;
};
int TestClass::sum(int a, int b){// 成员函数实现
return a + b + m_data;
}
需要注意的是,成员函数的定义需要使用类名限定,例如TestClas::sum。在函数体中可以使用this指针来访问对象的数据成员和调用对象的其它方法。
示例说明1:计算器类
创建计算器类
class Calculator{
public:
Calculator();
Calculator(double initValue);
double getValue();
void setValue(double value);
double add(double value);
double subtract(double value);
double multiply(double value);
double divide(double value);
private:
double m_value;
};
计算器类的实现
Calculator::Calculator(){
m_value = 0;
}
Calculator::Calculator(double initValue){
m_value = initValue;
}
double Calculator::getValue(){
return m_value;
}
void Calculator::setValue(double value){
m_value = value;
}
double Calculator::add(double value){
m_value += value;
return m_value;
}
double Calculator::subtract(double value){
m_value -= value;
return m_value;
}
double Calculator::multiply(double value){
m_value *= value;
return m_value;
}
double Calculator::divide(double value){
if(value == 0){
cout << "Error: division by zero" << endl;
return m_value;
}
m_value /= value;
return m_value;
}
测试计算器类
Calculator cal(10); // 创建一个初始值为10的计算器对象
cal.add(5); // 累加5,结果为15
cal.subtract(3); // 减去3,结果为12
cal.multiply(2); // 乘以2,结果为24
cal.divide(4); // 除以4,结果为6
cout << "Result: " << cal.getValue() << endl; // 输出结果为6
示例说明2:点类和线段类
创建点类
class Point{
public:
Point();
Point(double x, double y);
void setX(double x);
void setY(double y);
double getX();
double getY();
double distanceTo(Point p);
private:
double m_x;
double m_y;
};
点类的实现
Point::Point(){
m_x = 0;
m_y = 0;
}
Point::Point(double x, double y){
m_x = x;
m_y = y;
}
void Point::setX(double x){
m_x = x;
}
void Point::setY(double y){
m_y = y;
}
double Point::getX(){
return m_x;
}
double Point::getY(){
return m_y;
}
double Point::distanceTo(Point p){
double dx = m_x - p.m_x;
double dy = m_y - p.m_y;
return sqrt(dx * dx + dy * dy);
}
创建线段类
class Line{
public:
Line();
Line(Point p1, Point p2);
void setPoint1(Point p);
void setPoint2(Point p);
Point getPoint1();
Point getPoint2();
double length();
private:
Point m_p1;
Point m_p2;
};
线段类的实现
Line::Line(){
}
Line::Line(Point p1, Point p2){
m_p1 = p1;
m_p2 = p2;
}
void Line::setPoint1(Point p){
m_p1 = p;
}
void Line::setPoint2(Point p){
m_p2 = p;
}
Point Line::getPoint1(){
return m_p1;
}
Point Line::getPoint2(){
return m_p2;
}
double Line::length(){
return m_p1.distanceTo(m_p2);
}
测试点类和线段类
Point p1(0, 0);
Point p2(3, 4);
cout << "Distance between p1 and p2: " << p1.distanceTo(p2) << endl;
Line line(p1, p2);
cout << "Length of line: " << line.length() << endl;
总结
本文介绍了C++中类和对象的基本概念、定义方法、成员函数的定义和实现、以及通过两个示例说明了类和对象的实际应用。需要注意的是,类和对象是C++中重要的概念,需要认真学习和掌握。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++全面精通类与对象 - Python技术站