C++ 类&对象
第三章 C++类
文章目录
前言
C++ 支持面向对象程序设计。类是 C++ 的核心特性,通常被称为用户定义的类型。类用于指定对象的形式,它包含了数据表示法和用于处理数据的方法。类中的数据和方法称为类的成员。函数在一个类中被称为类的成员。
一、类的定义和声明
1. C++ 类的结构
类包括:数据和函数,其中根据权限不同,指定了数据的公共和私有属性。
class Box
{
private:
double length1;
double breadth1;
public:
double height;
};
2.定义 C++ 对象
Box Box1; // 声明 Box1,类型为 Box
Box Box2; // 声明 Box2,类型为 Box
3. 类成员函数
类成员函数是类的一个成员,它可以操作类的任意对象,可以访问对象中的所有成员。
class Box
{
public:
int length;
int height;
int getvolume(void){
return length * height;
}
// 类成员函数声明
double geth(void);
};
int main()
{
Box box1;
box1.length = 5;
box1.height = 3;
cout<<box1.geth();
}
// 也可以在类的外部使用范围解析运算符 :: 定义该函数
double Box::geth(void)
{
return length - height;
}
3. C++ 类访问修饰符
数据封装是面向对象编程的一个重要特点,它防止函数直接访问类类型的内部成员。类成员的访问限制是通过在类主体内部对各个区域标记 public、private、protected 来指定的。关键字 public、private、protected
称为访问修饰符。
一个类可以有多个 public
、protected
或 private
标记区域。每个标记区域在下一个标记区域开始之前或者在遇到类主体结束右括号之前都是有效的。成员和类的默认访问修饰符是 private
。
- public: 公有成员在程序中类的外部是可访问的。您可以不使用任何成员函数来设置和获取公有变量的值
- private: 私有成员变量或函数在类的外部是不可访问的,甚至是不可查看的。只有类和友元函数可以访问私有成员。如果您没有使用任何访问修饰符,类的成员将被假定为私有成员 (实际操作中,我们一般会在私有区域定义数据,在公有区域定义相关的函数,以便在类的外部也可以调用这些函数)
- protected: protected(受保护)成员变量或函数与私有成员十分相似,但有一点不同,protected(受保护)成员在派生类(即子类)中是可访问的。
4. 类构造函数 & 析构函数
类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。
class Box
{ private:
int length;
int height;
public:
int add(int length, int height);
int getLength(void);
//Box(int len,int high){length=len;height=high;}; // 这是构造函数
Box(int len,int high): length(len),height(high){};//上面的语法等同于如下语法:
};
int main()
{ Box box1(20,10);
cout<< box1.getLength()<<endl;
cout <<box1.add(10,10)<< endl;
Box box2(5,5);
box2 = box1; // 重新给对象和对象之间的相互赋值
cout<< box2.getLength()<<endl;
}
int Box::add(int x, int y){return x*y;}
int Box::getLength(void){return length;}
5. this指针
this指针指向用来调用成员函数的对象。 This本质就是指向本对象的一个指针。
class Box
{ private:
int length;
int height;
public:
int getlen(){
return length;};
int compare(Box box){
return this->getlen()<box.getlen();
}
Box(int len,int high): length(len),height(high){};//上面的语法等同于如下语法:
};
int main()
{ Box box1(20,10);
Box box2(5,5);
cout<< box1.compare(box2)<<endl;
}
5. 指向类的指针
一个指向 C++ 类的指针与指向结构的指针类似,访问指向类的指针的成员,需要使用成员访问运算符 ->,就像访问指向结构的指针一样。与所有的指针一样,您必须在使用指针之前,对指针进行初始化。
class Box
{ private:
int length;
int height;
public:
int getlen(){
return length;};
int compare(Box box){
return this->getlen()<box.getlen();
}
Box(int len,int high): length(len),height(high){};//上面的语法等同于如下语法:
};
int main()
{ Box box1(20,10);
Box box2(25,5);
Box *ptrBox=&box1;
cout<< ptrBox->compare(box2)<<endl;
}