13x1类和对象-1

admin 2025年2月14日08:51:37评论3 views字数 4677阅读15分35秒阅读模式

关注泷羽Sec-静安 公众号,后台回复 找书+ C++Primer 获取C++相关电子书

13x1类和对象-1
image-20250211221401317
  • 类:类是一个抽象的模板,用于定义对象的属性和行为。
  • 对象:对象是类的具体实例,通过类创建。

面向对象三大特性:

  • 封装 (Encapsulation):通过将数据成员设为私有(private),并提供公共(public)方法来控制对数据的访问,保护数据不被外部直接修改。
  • 继承 (Inheritance):通过继承基类的属性和方法,派生类可以复用基类的代码,并可以添加新的属性和方法。
  • 多态 (Polymorphism):通过基类指针或引用调用派生类的重写方法,实现同一接口的不同实现。
#include<iostream>#include<string>usingnamespacestd;/*----------- 类和对象基础 -----------*/// 类:抽象模板 | 对象:具体实例classDog {// 类声明public:string name;     // 属性voidbark(){    // 方法cout << name << ": Wang Wang!" << endl;    }};// 使用示例:intmain(){    Dog myDog;           // 创建对象    myDog.name = "Buddy";    myDog.bark();        // 输出:Buddy: Wang Wang!/*----------- 封装 (Encapsulation) -----------*/classBankAccount {private:             // 封装敏感数据double balance;public:// 公开接口控制访问voiddeposit(double amount){if (amount > 0) balance += amount;        }boolwithdraw(double amount){if (amount <= balance) {                balance -= amount;returntrue;            }returnfalse;        }doublegetBalance()return balance; } // 只读访问    };// 使用示例:    BankAccount acc;    acc.deposit(1000);      // 合法操作// acc.balance = 10000; // 错误:无法直接访问private成员/*----------- 继承 (Inheritance) -----------*/// 基类classVehicle {public:string brand;voidhonk(){cout << "Tu~ Tu~" << endl;        }    };// 派生类classCar :public Vehicle { // 继承语法public:int wheels = 4;         // 新增属性voidshowSpec(){       // 新增方法cout << brand << " Car with " << wheels << " wheels" << endl;        }    };// 使用示例:    Car myCar;    myCar.brand = "BMW";  // 继承自基类    myCar.honk();         // 调用基类方法    myCar.showSpec();     // 输出:BMW Car with 4 wheels/*----------- 多态 (Polymorphism) -----------*/classShape {//一个形状public:virtualdoublearea()// 虚函数实现多态基础return0;        }    };classCircle :public Shape { //圆double radius;public:        Circle(double r) : radius(r) {}doublearea()override// 重写基类方法return3.14159 * radius * radius;        }    };classRectangle :public Shape {  //角度double width, height;public:        Rectangle(double w, double h) : width(w), height(h) {}doublearea()override// 重写基类方法return width * height;        }    };// 使用示例:    Shape* shapes[2];          // 基类指针数组    shapes[0] = new Circle(5); // 指向派生类对象    shapes[1] = new Rectangle(46);// 同一接口表现不同行为cout << "Circle area: " << shapes[0]->area() << endl;  // 输出78.5397cout << "Rectangle area: " << shapes[1]->area() << endl// 输出24/* 多态实现关键点:    1. 基类方法声明为virtual    2. 派生类使用override重写方法    3. 通过基类指针/引用调用方法 */// 清理动态分配的内存delete shapes[0];delete shapes[1];return0;}---Buddy: Wang Wang!Tu~ Tu~BMW Car with 4 wheelsCircle area: 78.5397Rectangle area: 24

三种访问权限

  • 公共权限(public):公共成员可以在任何地方访问,包括类外部和派生类中。 示例:int publicVar; 可以在 main 函数中直接访问。
  • 保护权限(protected):保护成员只能在本类和派生类中访问,不能在类外部访问。 示例:int protectedVar; 可以在派生类 Derived 中访问,但不能在 main 函数中直接访问。
  • 私有权限(private):私有成员只能在本类中访问,不能在类外部和派生类中访问。 示例:int privateVar; 只能在 Base 类的成员函数中访问,不能在 main 函数和派生类 Derived 中直接访问。
#include<iostream>#include<string>usingnamespacestd;/*----------- 访问权限示例 -----------*/classBase {public:int publicVar; // 公共权限:任何地方都可以访问protected:int protectedVar; // 保护权限:派生类和本类可以访问private:int privateVar; // 私有权限:只有本类可以访问public:// 构造函数    Base(int pub, int prot, int priv) : publicVar(pub), protectedVar(prot), privateVar(priv) {}// 公共方法,访问私有成员voidshowPrivateVar(){cout << "Private Variable: " << privateVar << endl;    }};// 派生类classDerived :public Base {public:// 构造函数    Derived(int pub, int prot, int priv) : Base(pub, prot, priv) {}// 访问基类的保护成员voidshowProtectedVar(){cout << "Protected Variable: " << protectedVar << endl;    }};intmain(){// 创建基类对象Base baseObj(123);// 访问公共成员cout << "Public Variable: " << baseObj.publicVar << endl;// 访问私有成员(错误)// cout << "Private Variable: " << baseObj.privateVar << endl; // 错误:无法访问私有成员// 通过公共方法访问私有成员    baseObj.showPrivateVar();// 创建派生类对象Derived derivedObj(456);// 访问基类的公共成员cout << "Public Variable (Derived): " << derivedObj.publicVar << endl;// 访问基类的保护成员(错误)// cout << "Protected Variable (Derived): " << derivedObj.protectedVar << endl; // 错误:无法直接访问保护成员// 通过派生类方法访问基类的保护成员    derivedObj.showProtectedVar();return0;}---Public Variable: 1Private Variable: 3Public Variable(Derived): 4Protected Variable: 5

struct 和 class的区别

在C++中,struct 和 class 的主要区别在于默认的访问控制权限。以下是详细的解释和示例代码: 区别

  1. 默认访问控制权限: struct 的成员默认是 public。 class 的成员默认是 private。
  2. 继承: struct 默认的继承方式是 public。 class 默认的继承方式是 private。
#include<iostream>#include<string>usingnamespacestd;// 使用 structstructMyStruct {int publicVar; // 默认是 public    MyStruct(int val) : publicVar(val) {}};// 使用 classclassMyClass {int privateVar; // 默认是 privatepublic:    MyClass(int val) : privateVar(val) {}intgetPrivateVar()const{return privateVar;    }};intmain(){// 使用 structMyStruct s(10);cout << "MyStruct publicVar: " << s.publicVar << endl// 可以直接访问// 使用 classMyClass c(20);// cout << "MyClass privateVar: " << c.privateVar << endl; // 错误:无法直接访问 private 成员cout << "MyClass privateVar: " << c.getPrivateVar() << endl// 通过公共方法访问return0;}---MyStruct publicVar: 10MyClass privateVar: 20

🔔 想要获取更多网络安全与编程技术干货?

关注 泷羽Sec-静安 公众号,与你一起探索前沿技术,分享实用的学习资源与工具。我们专注于深入分析,拒绝浮躁,只做最实用的技术分享!💻

扫描下方二维码,马上加入我们,共同成长!🌟

👉 长按或扫描二维码关注公众号

或者直接回复文章中的关键词,获取更多技术资料与书单推荐!📚

原文始发于微信公众号(泷羽Sec-静安):13x1类和对象-1

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月14日08:51:37
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   13x1类和对象-1http://cn-sec.com/archives/3739073.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息