首页 > 编程语言 >传统C++回顾

传统C++回顾

时间:2024-05-09 18:00:24浏览次数:25  
标签:myVector 回顾 对象 C++ 复制 Line 拷贝 传统 构造函数

主要参考菜鸟教程,用于回忆当时没有好好学习的C++98

Vector的学习

#include <iostream>
#include <vector>
using namespace std;

int main() {
  vector<int> myVector;

  myVector.push_back(3);
  myVector.push_back(7);
  myVector.push_back(11);
  myVector.push_back(5);

  cout << "Elements in the vector: ";
  for (int element : myVector) {
    cout << element << " ";
  }
  cout << endl;

  cout << "First Element: " << myVector[0] << endl;
  cout << "Second Element: " << myVector.at(1) << endl;
  cout << "Size of vector: " << myVector.size() << endl;

  myVector.erase(myVector.begin() + 2);

  cout << "Elements in the vector after erasing: ";
  for (int element : myVector) {
    cout << element << " ";
  }
  cout << endl;

  myVector.clear();
  cout << "Size of the vector after clearing: " << myVector.size() << endl;
  return 0;
}

C++面向对象

  1. 类访问修饰符
  • public: 可以被外部访问
  • private: 只能在类内部访问
  • protected: 可以被子类访问
  1. 类构造函数 & 析构函数
  • 构造函数,作用是初始化对象
    • 默认构造函数 Line()
    • 带参数的构造函数 Line(double len)
    • 初始化列表 Line::Line( double len): length(len)
  • 析构函数,作用是释放对象
    • Line::~Line()
  1. 拷贝构造函数
  • 它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象
    • 通过使用另一个同类型的对象来初始化新创建的对象
    • 复制对象把它作为参数传递给函数
    • 复制对象,并从函数返回这个对象
      如果在类中没有定义拷贝构造函数,编译器会自行定义一个。如果类带有指针变量,并有动态内存分配,则它必须有一个拷贝构造函数。

拷贝构造函数确保了在创建对象副本时正确地复制了动态分配的内存,并保持了原始对象和新对象之间的独立性。但这会带来性能上的损失,尤其是在处理大型对象或包含复杂资源(如动态分配内存、文件句柄、网络连接等)的对象时。每次拷贝构造函数被调用时,都会执行一次对象的复制操作,这可能会涉及昂贵的资源分配和复制过程。

为了减少性能损失,可以采取以下措施:

  • 使用引用传递:在函数参数中使用引用或常量引用来避免不必要的拷贝。
  • 移动语义:C++11引入了右值引用和移动构造函数,可以更高效地处理临时对象的拷贝,通过“偷走”资源而不是复制它们。
  • 优化拷贝构造函数:如果可能,优化拷贝构造函数的实现,避免不必要的复制操作。
  • 使用智能指针:例如,使用std::unique_ptr或std::shared_ptr来自动管理资源,这样可以减少手动内存管理的需要,并且可以更高效地处理对象的复制。

标签:myVector,回顾,对象,C++,复制,Line,拷贝,传统,构造函数
From: https://www.cnblogs.com/moguw/p/18182851

相关文章

  • C++ const常量指针
    const常量指针const是C++关键字,译为常量,const指针即为常量指针。分为三类指向const的指针const指针指向const的const指针指向const的指针表示指向区域的数据是不可变的,但是可以更换指向语法(将const卸载*之前):const数据类型*指针名数据类型const*指针名......
  • C++ 数组元素操作
    数组元素的移除核心思路:创建一个新的内存空间存储移除后的数组,再将原数组delete释放,再将指针指向新数组。cout<<"-----------------------------数组元素的移除-------------------------"<<endl;//cout<<deleteArrByIndex(0,arr11)<<endl;//示例数组int*p......
  • C++面试考点
    c++基础1、malloc/free和new/delete的异同点?2、cpp程序运行时内存模型?答:代码区,只读的区域,是代码被翻译成二进制机器指令存储的地方;数据区,分为初始化数据区和未初始化数据区,用来存储全局变量和static变量的地方;堆区,动态内存分配的地方,new和malloc分配就是从此处分配;栈区,函数调用......
  • GCC编译C++步骤
    在使用GCC编译器编译多个源文件时,你需要将所有需要编译的源文件列出,并在命令行中将它们一起传递给GCC。GCC会将这些源文件编译成目标文件(.o文件),然后链接成最终的可执行文件或动态库。下面是一个示例命令行:bashCopycodeg++-cfile1.cppfile2.cppfile3.cpp在这个......
  • C语言调用C++的共享库SO
    C语言调用C++的共享库SO今天在项目中,遇到了一个问题,对方提供给我们一个.h的声明文件(使用的是cpp语言),和一个动态库so。但是我们项目中用的是C语言,我们如何来调用so库中的方法呢?我们都知道,C++在设计时,兼容C语言,可以直接调用C语言库中的接口,但是C语言调用C++的接口就会比较困难,比如C......
  • C++: fatal error: Killed signal terminated program cc1plus
    C++:fatalerror:Killedsignalterminatedprogramcc1plus1.在Linux系统中进行C++编译时,出现如下报错,导致编译中止:C++:fatalerror:Killedsignalterminatedprogramcc1pluscompilationterminated.2.解决方法——swap分区查阅相关信息后,认为是虚拟机内存不足造成......
  • 131. 分割回文串-c++
    给你一个字符串s,请你将s分割成一些子串,使每个子串都是回文串。返回s所有可能的分割方案。示例1:输入:s="aab"输出:[["a","a","b"],["aa","b"]]示例2:输入:s="a"输出:[["a"]]classSolution{public:vector<vector......
  • 79. 单词搜索-c++
    给定一个mxn二维字符网格board和一个字符串单词word。如果word存在于网格中,返回true;否则,返回false。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例1:输入......
  • C++基础-如何引入第三方静态库、动态库或自定义库 摘自 https://blog.csdn.net/u01310
    C++无论是内置库还是第三方库,都需要自己手动进行查找、配置、引入等工作。本文即是帮助完成C++项目对于库、框架如何完成依赖引入达成可调用的目的,重点讲述开发工具VisualStudio中的操作静态库(.lib)静态库引入适用用于大部分无开源的第三方库,开发者不需要关心库的具体实现如何,......
  • UEC++做拖拽时的UDragDropOperation 的PayLoad是什么
    在UnrealEngine中,使用C++进行拖拽操作时,UDragDropOperation类的Payload成员变量允许你传递与拖拽操作相关的任何类型的数据。它通常被用来存储一些关于被拖拽元素的信息,这些信息在拖拽开始时被设置,然后可以在拖拽结束时被检索和使用。Payload是一个UObject*类型的指针,这意......