C++类与对象的重点知识点详细分析
什么是C++类和对象?
类是一种用户自定义的数据类型,它将数据的成员变量和行为的成员函数封装到一个单元中,用以描述现实世界中的对象,从而方便程序员编写复杂的业务逻辑。类的实例化对象称为对象,每个对象都有自己的数据和操作方法。C++中的类和对象是C语言的扩展,可以使用封装、继承和多态等特性实现OOP思想。
如何定义一个C++类?
C++中定义一个类的基本语法如下:
class 类名
{
访问控制符:
成员变量;
public :
成员函数;
};
其中,访问控制符包括public、protected和private三种。公有成员可以在类的内部和外部被访问,私有成员只能在类的内部被访问,而保护成员和私有类似,但子类可以访问。
例如,我们可以定义一个简单的Cat类来说明如何创建类和成员方法:
class Cat
{
private:
int age;
string name;
public:
void setAge(int a)
{
age = a;
}
int getAge()
{
return age;
}
void setName(string n)
{
name = n;
}
string getName()
{
return name;
}
void say()
{
cout << "My name is " << name << ", and I'm " << age << " years old." << endl;
}
};
在这个例子中,我们定义了一个Cat类,它有私有成员变量age和name,还有公有成员函数setAge、getAge、setName、getName和say。成员函数可以只声明在类中,而不定义它的函数体,但要在外部定义函数体。
如何创建一个C++对象?
创建类的对象我们需要使用类名以及对象名来创建,使用的方式是:
ClassName ObjectName;
例如,我们可以创建一个Cat对象并设置其属性:
Cat cat1;
cat1.setAge(2);
cat1.setName("Tom");
cat1.say();
C++类拷贝构造函数
C++类拷贝构造函数用于在创建新对象时,以已有对象的值作为新对象的初始值。它的定义格式如下:
类名(const 类名& Obj)
{
// 构造函数的代码
}
例如,我们可以为Cat类添加一个拷贝构造函数:
Cat(const Cat& c)
{
age = c.age;
name = c.name;
}
这样我们就可以用已有Cat类的对象来初始化一个新的Cat类的对象:
Cat cat2 = cat1;
cat2.say();
C++类析构函数
C++类析构函数用于在删除对象时执行必要的清理工作。析构函数的名称必须是类名前加~,它没有返回类型和参数,定义格式如下:
~类名()
{
// 析构函数的代码
}
例如,我们可以为Cat类添加一个析构函数:
~Cat()
{
cout << "I'm dying..." << endl;
}
这样我们就可以在删除Cat对象时执行必要的清理工作:
{
Cat cat3;
cat3.setAge(1);
cat3.setName("Jerry");
cat3.say();
}
程序执行到这里时,cat3对象将会被销毁,输出:I'm dying...。
C++类成员变量和成员函数访问控制
在一个C++类中,成员变量和成员函数可以使用public、protected或private关键字声明其访问控制。它们的访问控制说明如下:
- public:公有成员,可以在类内部和外部访问;
- protected:保护成员,可以在类内部以及派生类中访问;
- private:私有成员,只能在类内部访问,不能在派生类和其他地方访问。
例如,以下是一个关于C++成员变量和成员函数访问控制的示例:
class Rectangle
{
private:
double length;
double width;
public:
void setLength(double len)
{
length = len;
}
void setWidth(double wid)
{
width = wid;
}
double getLength()
{
return length;
}
double getWidth()
{
return width;
}
protected:
double area()
{
return length * width;
}
};
class Square: public Rectangle
{
public:
void setSide(double s)
{
setLength(s);
setWidth(s);
}
double getArea()
{
return area();
}
};
在这个例子中,我们定义了两个类Rectangle和Square。Rectangle类有两个私有成员变量length和width,以及四个公有成员函数setLength、setWidth、getLength和getWidth,其中set和get函数用于设置和返回私有成员变量,而area函数用于计算面积。Square类继承Rectangle类,包含了一个公有成员函数setSide和私有成员函数getArea,用于设置正方形边长和计算正方形面积。由于父类Rectangle的area函数是保护成员,因此子类Square可以调用其父类的area函数来计算面积。
下面是使用示例:
Square s;
s.setSide(3);
double area = s.getArea();
cout << "The square area is: " << area << endl;
运行结果为: The square area is: 9.
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++类与对象的重点知识点详细分析 - Python技术站