C++学习笔记7:类与对象(重要)

本文详细探讨了C++中的类和对象,包括类的定义、对象的创建、访问修饰符、构造函数与析构函数的使用、拷贝构造函数、友元函数、内联函数以及this指针的概念。同时讲解了静态成员和静态成员函数的特性,强调了静态成员的共享性质和静态成员函数的调用方式。
摘要由CSDN通过智能技术生成

定义类

定义一个类,本质上定义了类的对象包括了什么,以及可以在这个对象上执行哪些操作。

类定义是以关键字 class 开头,后跟类的名称。类的主体是包含在一对花括号中。类定义后必须跟着一个分号或一个声明列表。

class Box{
   
   public:
      double length;   // 盒子的长度
      double breadth;  // 盒子的宽度
      double height;   // 盒子的高度
};

关键字 public 确定了类成员的访问属性。在类对象作用域内,公共成员在类的外部是可访问的。也可以指定类的成员为 private 或 protected。

定义对象

对象是根据类来创建的。声明类的对象,就像声明基本类型的变量一样。

Box Box1;          // 声明 Box1,类型为 Box
Box Box2;          // 声明 Box2,类型为 Box

对象 Box1 和 Box2 都有它们各自的数据成员。

访问数据成员
类的对象的公共数据成员可以使用直接成员访问运算符 (.) 来访问。
私有的成员和受保护的成员不能使用直接成员访问运算符 (.) 来直接访问

#include <iostream> 
using namespace std; 
class Box{
   public:
      double length;   // 长度
      double breadth;  // 宽度
      double height;   // 高度
}; 
int main( ){
   Box Box1;        // 声明 Box1,类型为 Box
   double volume = 0.0;     // 用于存储体积 
   // box 1 详述
   Box1.height = 5.0; 
   Box1.length = 6.0; 
   Box1.breadth = 7.0;
   // box 1 的体积
   volume = Box1.height * Box1.length * Box1.breadth;
   cout << "Box1 的体积:" << volume <<endl; //210
   return 0;
}

类访问修饰符

数据封装是面向对象编程的一个重要特点,它防止函数直接访问类类型的内部成员。
类成员可以被定义为 public、private 或 protected。默认情况下是定义为 private。

类成员类型 描述
public 成员 公有成员在程序中类的外部是可访问的
private 成员 私有成员在类的外部是不可访问的。只有类和友元函数可以访问私有成员
protected 成员 保护成员与私有成员十分相似,但保护成员在派生类(子类)中是可访问的。

继承有public, protected, private三种继承方式,它们相应地改变了基类成员的访问属性。

继承类型 描述
public继承 基类 public, protected, private 成员的访问属性在派生类中分别变成:public, protected, private
protected继承 基类 public, protected, private 成员的访问属性在派生类中分别变成:protected, protected, private
private 继承 基类 public, protected, private 成员的访问属性在派生类中分别变成:private, private, private

但无论哪种继承方式,上面两点都没有改变:
1.private 成员只能被本类成员(类内)和友元访问,不能被派生类访问;
2.protected 成员可以被派生类访问。

构造函数 & 析构函数

类的构造函数是一种特殊的函数,在创建一个新的对象时调用。
类的析构函数也是一种特殊的函数,在删除所创建的对象时调用。

构造函数

构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。
默认的构造函数没有任何参数,但构造函数也可以带有参数。这样在创建对象时就会给对象赋初始值。

class Line{
   
   public:  Line();  // 这是构造函数
   private:  double length;
}; 
Line::Line(void){
   
    cout << "Object is being created" << endl;
}
//带参构造函数
class Line{
   
   public:Line(double len);  // 这是构造函数 
   private:double length;
};
Line::Line( double len){
   
    cout << "Object is being created, length = " << len << endl;
    length = len;
}
构造函数的调用顺序

a.先调用基类构造函数
b.按声明顺序初始化数据成员
c.最后调用自己的构造函数。

使用初始化列表来初始化字段

可以将构造函数写成这样,与上面等效

Line::Line( double len): length(len){
   
    cout << "Object is being created, length = " << len << endl;
}

假设有一个类 C,具有多个字段 X、Y、Z 等需要进行初始化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值