首页 > 编程语言 >C++面向对象编程(OOP)教程

C++面向对象编程(OOP)教程

时间:2024-09-01 11:50:18浏览次数:6  
标签:Animal int void C++ OOP 面向对象编程 public

C++面向对象编程(OOP)教程

在C++中,面向对象编程(OOP)是一种编程范式,它基于“对象”的概念来设计软件。OOP强调将数据(属性)和操作这些数据的方法(行为)封装在一起,形成对象。这种封装提高了代码的模块化、可重用性和可维护性。C++通过类(Class)、对象(Object)、继承(Inheritance)、封装(Encapsulation)和多态(Polymorphism)等特性支持OOP。

1. 类与对象

类(Class) 是创建对象的蓝图或模板。它定义了对象的属性(也称为成员变量或数据成员)和行为(成员函数或方法)。

class Rectangle {
public:
int width, height;
// 成员函数
void setSize(int w, int h) {
width = w;
height = h;
}
int getArea() {
return width * height;
}
};
int main() {
Rectangle rect; // 创建Rectangle类的对象rect
rect.setSize(10, 20); // 调用成员函数设置宽和高
std::cout << "Area: " << rect.getArea() << std::endl; // 调用成员函数计算面积并输出
return 0;
}

对象(Object) 是类的实例。在上面的例子中,rect就是Rectangle类的一个对象。

2. 封装

封装是将对象的数据和操作这些数据的方法组合成一个单元(即类),并尽可能隐藏对象的内部细节(数据成员),只通过公共接口(成员函数)与外部交互。这提高了数据的安全性。

在C++中,通常通过访问修饰符(publicprotectedprivate)来控制成员的可访问性,以实现封装。

3. 继承

继承允许我们基于一个已存在的类来定义一个新的类,称为子类(派生类),它继承了父类(基类)的属性和方法。子类可以添加新的属性和方法,也可以重写(Override)继承自父类的方法。

class Shape {
public:
void draw() {
std::cout << "Drawing a shape" << std::endl;
}
};
class Circle : public Shape {
public:
void draw() override { // 重写draw方法
std::cout << "Drawing a circle" << std::endl;
}
};
int main() {
Circle c;
c.draw(); // 调用Circle类的draw方法,输出Drawing a circle
return 0;
}
4. 多态

多态是面向对象编程中的一个核心概念,它允许我们通过基类指针或引用来调用派生类的成员函数。这种机制通过虚函数(Virtual Functions)实现。

class Animal {
public:
virtual void speak() {
std::cout << "Animal sound" << std::endl;
}
virtual ~Animal() {} // 虚析构函数
};
class Dog : public Animal {
public:
void speak() override {
std::cout << "Woof!" << std::endl;
}
};
void makeItSpeak(Animal* animal) {
animal->speak(); // 多态调用
}
int main() {
Dog d;
makeItSpeak(&d); // 输出Woof!
return 0;
}

在上面的例子中,makeItSpeak函数接受一个指向Animal类型的指针,但我们可以传递任何Animal类型的派生类对象给它,并调用相应的speak方法,这就是多态性的体现。

结论

C++的面向对象编程提供了强大的工具来构建复杂、灵活和可维护的软件系统。通过类、对象、封装、继承和多态等特性,C++程序员可以设计出高内聚、低耦合的代码结构,从而提高软件的开发效率和质量。希望这篇教程能帮助你理解C++的面向对象编程的基本概念。

标签:Animal,int,void,C++,OOP,面向对象编程,public
From: https://blog.csdn.net/hlb20130715/article/details/141575429

相关文章

  • c++ STL常用容器使用(vector、deque、stack、queue、list、set、map等)
    1、vector使用动态数组,也叫可变数组,容器的空间是动态增长的,当空间不足时,申请更大一块空间,让后将原数据拷贝到新空间中,并释放原空间在这里插入图片描述1.1、初始化操作intarr[]={1,3,2,5};//1、方式一(初始化)vector<int>v1;//容器尾部插入数据v1.push_back(1);v1......
  • C++基础之指针(加精)
    指针真正的用武之地在于,在运行阶段分配未命名的内存以存储值。在这种情况下,只能通过指针来访问内存。在C语言中,可以用库函数malloc()来分配内存;在C++中仍然可以这样做,但C++还有更好的方法——new运算符。文章目录指针与数组深入探究探究一探究二探究三探究四探究五探......
  • opencv/c++的一些简单的操作(入门)
    目录读取图片读取视频读取摄像头图像处理腐蚀膨胀调整图像大小裁剪和缩放 绘制绘制矩形绘制圆形绘制线条透视变换颜色检测轮廓查找人脸检测检测人脸检测嘴巴可适当调整参数读取图片读取路径widows使用vissto一定是\斜杠#include<opencv2/imgcodec......
  • 前K个高频单词 C++
    给定一个单词列表 words 和一个整数 k ,返回前 k 个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率, 按字典顺序 排序。示例1:输入:words=["i","love","leetcode","i","love","coding"],k=2输出:["i","......
  • 大数据处理从零开始————1.Hadoop介绍
    1.大数据时代背景1.1大数据时代到来    在微信上,随手点的一个赞;在百度上,随手输入的搜素关键词;在健康记录应用上,每天所产生的微信步数这些都是数据。我们每人每天都在产生大量数据。人类近些年所产生的数据比过去几千年所产生数据多得多,所以如何让这些储存数据,如何......
  • 【C++的创新性】C++11语法颠覆你的认知了吗?
    ​ 学习编程就得循环渐进,扎实基础,勿在浮沙筑高台   循环渐进Forward-CSDN博客Hello,这里是kiki,今天继续更新C++部分,我们继续来扩充我们的知识面,我希望能努力把抽象繁多的知识讲的生动又通俗易懂,今天要讲的是C++哈希~目录 循环渐进Forward-CSDN博客C++11简介......
  • 深入解析:如何在复杂 C++ 项目中高效集成 CMake 和 Conan
    目录标题第一章:C++项目中的Conan和CMake基础架构1.1项目架构概述1.2CMake与Conan的基本角色1.2.1CMake的角色1.2.2Conan的角色1.3在项目中合理结合使用CMake和Conan1.4实例分析1.5结语第二章:C++项目中的CMake和Conan实践2.1项目结构概览......
  • C++基础(1)——入门知识
    目录1.C++版本更新2.C++参考⽂档:3.C++书籍推荐4.C++的第⼀个程序5.命名空间5.1namespace的价值5.2namespace的定义5.3命名空间使⽤6.C++输⼊&输出7.缺省参数8.函数重载9.引⽤9.1引⽤的概念和定义9.2引⽤的特性9.3引⽤的使用9.4const引⽤ 9.5指针和引⽤的关......
  • C++ lambda 引用捕获临时对象引发 core 的案例
    今天复习前几年在项目过程中积累的各类技术案例,有一个小的coredump案例,当时小组里几位较资深的同事都没看出来,后面是我周末查了两三个小时解决掉的,今天再做一次系统的总结,给出一个复现的案例代码,案例代码比较简单,便于学习理解。1.简介原则:临时对象不应该被lambda引用捕获,因......
  • 算法题技巧之“枚举右维护左“--套路详细讲解带例题和易懂代码(Python,C++)
    本文参考:灵茶山艾府-力扣(LeetCode)        分享丨【题单】常用数据结构(前缀和/差分/栈/队列/堆/字典树/并查集/树状数组/线段树)-力扣(LeetCode)    本文主要讲解关于”枚举右维护左“这个刷算法题的技巧,包括简单的原理讲解和两个简单的例题(之后我也会总......