c++自学笔记

这篇具有很好参考价值的文章主要介绍了c++自学笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本笔记为从菜鸟教程边学边记录的笔记---》C++ 教程 | 菜鸟教程

面向对象程序设计

  • 封装(Encapsulation):封装是将数据和方法组合在一起,对外部隐藏实现细节,只公开对外提供的接口。这样可以提高安全性、可靠性和灵活性。

  • 继承(Inheritance):继承是从已有类中派生出新类,新类具有已有类的属性和方法,并且可以扩展或修改这些属性和方法。这样可以提高代码的复用性和可扩展性。

  • 多态(Polymorphism):多态是指同一种操作作用于不同的对象,可以有不同的解释和实现。它可以通过接口或继承实现,可以提高代码的灵活性和可读性。

  • 抽象(Abstraction):抽象是从具体的实例中提取共同的特征,形成抽象类或接口,以便于代码的复用和扩展。抽象类和接口可以让程序员专注于高层次的设计和业务逻辑,而不必关注底层的实现细节。

hello word

#include <stdio.h>
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
   SetConsoleOutputCP(65001);
   cout << "hello world!"<<endl; //也可以用\n代替endl;都是换行的意思
   return 0;
}

c++自学笔记

变量别名!

#include <iostream>
using namespace std;
int main()
{
    typedef int it;//int的别名 是it
    it a;//以后就可以用it来定义变量
}

枚举类型

默认情况下,第一个名称的值为 0,第二个名称的值为 1,第三个名称的值为 2,以此类推。但是,您也可以给名称赋予一个特殊的值,只需要添加一个初始值即可。例如,在下面的枚举中,green 的值为 5。

#include <iostream>
using namespace std;
int main()
{
   enum {green,blue=5,red} c;
   c=red;
   cout <<"sdsdds" <<c;
}

c++自学笔记

类型转换-静态转换

#include <iostream>
#include <typeinfo>
#include <windows.h>
using namespace std;
int main()
{
   SetConsoleOutputCP(65001);
   //这个是c++的断点 这配置c语言也支持断点
   int a = 10;
   //静态转换 数据 类型;
   float b=static_cast<float>(a);
   cout <<b<<"是"<<typeid(b).name()<<"类型";

}

c++自学笔记

 你像打印 i  就是int  打印 f   就是float;就是类型首字母

类型转换-常量转换

#include <iostream>
#include <typeinfo>
#include <windows.h>
using namespace std;
int main()
{
   SetConsoleOutputCP(65001);
   //这个是c++的断点 这配置c语言也支持断点
   const int a = 10;
   //常量转换
   int &b=const_cast<int&>(a);
   b=11;
   cout << b;
}

c++自学笔记

extern关键词用法

顺带你还知道下 .cpp怎么引入另一个.cpp的文件。

参考博主写的另一篇博文===》c++的extern用法理解_雪狼之夜的博客-CSDN博客

局部变量

局部作用域:在函数内部声明的变量具有局部作用域,它们只能在函数内部访问。局部变量在函数每次被调用时被创建,在函数执行完后被销毁。

#include <iostream>
using namespace std;
int main()
{
  int a=2;
  cout<<"局部变量a="<<a<<endl;
}

c++自学笔记

全局变量

全局作用域:在所有函数和代码块之外声明的变量具有全局作用域,它们可以被程序中的任何函数访问。全局变量在程序开始时被创建,在程序结束时被销毁。

#include <iostream>
using namespace std;
int a=2;
int main()
{
  cout<<"全局变量a="<<a<<endl;
}

c++自学笔记

块变量

块作用域:在代码块内部声明的变量具有块作用域,它们只能在代码块内部访问。块作用域变量在代码块每次被执行时被创建,在代码块执行完后被销毁。

#include <iostream>
using namespace std;

int main()
{
   int a=1;
   {
      int a=2;
      cout<<"块变量a="<<a<<endl;
   }
  cout<<"函数变量a="<<a<<endl;
}

c++自学笔记

<string> 

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

int main()
{
   string a="hello world";//或者写成string a("hello world") 等效
   a+=" 你好啊";
   cout<< a<<endl;
}

c++自学笔记

 类

#include <iostream>
using namespace std;
class Box{
   public:
      int a;
      int b;
      int chen(void){ //申明和定义在类里面
         return a*b;
      };
      void setVal(int,int);//先在类里面申明
      
};
void Box::setVal(int x,int y){//在类外面定义   范围解析运算符 :: 
   a=x;
   b=y;
};
int main(){
   Box box1;
   box1.setVal(3,2);
   cout << box1.chen();
}

c++自学笔记

类私有成员

#include <iostream>
using namespace std;
class Box{
   private://类私有,只有成员可以调用 也就是说你不可以通过box1.a来调用 ,这些变量其实你默认不用写private 这个变量,只要放在最上面他默认就是 私有
      int a,b;
   public://
      int c=10;
      int chen(void){ //申明和定义在类里面
         return a*b;
      };
      void setVal(int,int);//先在类里面申明
};
void Box::setVal(int x,int y){//在类外面定义
   a=x;
   b=y;
};
int main(){
   Box box1;
   cout<< box1.c<<endl;
   box1.setVal(3,2);
   cout << box1.chen();
}

c++自学笔记

看博主另一篇博文=》c++类 笔记_雪狼之夜的博客-CSDN博客

.cpp调用 .cpp和h的demo

看博主另一篇博文=》.cpp调用 .cpp和h的demo_雪狼之夜的博客-CSDN博客

数组

 C++ 不允许返回一个完整的数组作为函数的参数。但是,您可以通过指定不带索引的数组名来返回一个指向数组的指针。

你不能简单地返回指向局部数组的指针,因为当函数结束时,局部数组将被销毁,指向它的指针将变得无效。

C++ 不支持在函数外返回局部变量的地址,除非定义局部变量为 static 变量。

#include "head.h"
int* arrFun(){
   static int arr[3]={5,4,10};
   return arr;
} 

int main()
{
  int *arr=arrFun();
  cout<<arr[1];
}

c++自学笔记

函数动态分配数组

使用动态分配数组需要在函数内部使用 new 运算符来分配一个数组,并在函数结束时使用 delete 运算符释放该数组

#include "head.h"
int* arrFun(int size){
   int* arr=new int[size]; //这里也可以直接写3
   arr[0]=1;
   arr[1]=10;
   arr[2]=3;
   return arr;
} 

int main()
{
  int *arr=arrFun(3);
  cout<<arr[1];
  delete[] arr;
}

c++自学笔记

数组指针

#include <iostream>
using namespace std;
const int Max=3;
int main(){
   int arr[Max]={100,200,300};
   int *p;
   p=arr;
   for(int i=0;i<Max;i++){
      cout << "arr["<<i<<"]="<<*p<<endl;
      p++;
   }
}

c++自学笔记

今天也算理解了,p=arrr其实等价于p=&arr[0]  ,也就是说数组指针也可以变成下面这种写法。

我写一个从a[2]往a[0]输出的操作,你们理解下

#include <iostream>
using namespace std;
const int Max=3;
int main(){
   int arr[Max]={100,200,300};
   int *p;
   p=&arr[2];//等价于p=&arr[0]  也就是说
   for(int i=0;i<Max;i++){
      cout << "arr["<<i<<"]="<<*p<<endl;
      p--;
   }
}

c++自学笔记

数组指针另一种写法

#include <iostream>
using namespace std;
const int Max=3;
int main(){
   int arr[Max]={100,200,300};
   *(arr+2)=500;
   cout <<arr[2]<<endl;
   arr[2]=100;
   cout <<arr[2];
}

c++自学笔记

 *(arr+2)其实就等于 arr[2];  也就说说  等价于下面

#include <iostream>
using namespace std;
const int Max=3;
int main(){
   int arr[Max]={100,200,300};
   int *p;
   p=arr;
   cout<< *(p+2);
}

 c++自学笔记

 C++ 指向指针的指针

#include "head.h"
int main(){
   int a=3000;//(值,物理地址) (3000,0x62ff08)
   int *p;
   p=&a;//p(0x62ff08,3000)
   int **pp;
   pp=&p;
   cout<<"a:"<<"("<<a<<","<<&a<<")"<<endl;
   cout<<"p:"<<"("<<p<<","<<*p<<")"<<endl;
   cout<<"pp:"<<"("<<pp<<","<<**pp<<")";
}

c++自学笔记

c++自学笔记

引用

#include "head.h"

int main()
{
   int a,b;
   int& x=a;//引用
   a=3;
   int *y;//指针
   y=&b;
   b=10;
   cout<<x<<endl;
   cout<<*y<<endl;
   y=&a;
    cout<<*y<<endl;
}

c++自学笔记

指针交换值

#include <iostream>
using namespace std;
int main()
{
   extern void ptrFun(int*,int*);
   int a=1,b=5;
   ptrFun(&a,&b);
   cout<<"a:"<<a<<endl;
   cout<<"b:"<<b;
}
void ptrFun(int *x,int *y){
   int a;
   a=*x;
   *x=*y;
   *y=a;
}

c++自学笔记

 引用交换值

#include <iostream>
using namespace std;
int main()
{
   extern void ptrFun(int&,int&);
   int a=1,b=5;
   ptrFun(a,b);
   cout<<"a:"<<a<<endl;
   cout<<"b:"<<b;
}
void ptrFun(int& x,int& y){
   int a;
   a=x;
   x=y;
   y=a;
}

c++自学笔记

引用改变数组值

// #include <iostream>
// using namespace std;
#include "head.h"
double arr[]={10.23,55,17};
int main()
{
   extern double& arrFun(int);
   arrFun(1)=11.77;
   cout << arr[1];
}
double& arrFun(int x){
   double& ref=arr[x];
   return ref;
}

c++自学笔记

c++函数重载

看博主另一篇====》c++重载运算符和重载函数(图、文、代码)_雪狼之夜的博客-CSDN博客

c++多态笔记====》c++多态 笔记_雪狼之夜的博客-CSDN博客 

c++数据抽象、数据封装就概念。没啥好说的,去看看demo理解下

C++ 数据抽象 | 菜鸟教程

C++ 数据封装 | 菜鸟教程

c++接口

#include <iostream>
#include <windows.h>
#include <cmath>
using namespace std;
//抽象类 当接口用
class BOX{
    public:
    int a;
        BOX(int x){
            a=x;
        };
        virtual void count()=0;
};
class CYC:public BOX{
    public:
        CYC(int x):BOX(x){};
        void count(){
            cout << sqrt(a);
        }
};
// 程序的主函数
int main()
{
    SetConsoleOutputCP(65001); 
    CYC a(100);
    a.count();//求平方根
}

c++自学笔记

c++写入读取文件fs

#include <iostream>
#include <windows.h>
#include <fstream>
using namespace std;
// 程序的主函数
int main()
{
    SetConsoleOutputCP(65001); 
    char data[100];
    ofstream outfile;
    outfile.open("afile.dat");//打开。dat 没有就新建
    cout << "writing to the file"<<endl;
    cout << "Enter your name:";
    cin.getline(data,100);//获取输入信息
    outfile << data <<endl;
    cout <<"Enter your age:";
    cin>>data;
    cin.ignore(); //将cin中提取的 '\n' 忽略掉 不然会立马退出程序
    outfile << data <<endl;
    // 关闭打开的文件
   outfile.close();
   ifstream infile;// 以读模式打开文件
   infile.open("afile.dat"); 
   cout << "Reading from the file" << endl; 
   infile >> data; 
   // 在屏幕上写入数据
   cout <<data<<endl;//这一步只是读取文件并显示第一行
    infile >> data; 
    cout << data << endl; //读取文件内容并打印
    // 关闭打开的文件
   infile.close();

}

c++自学笔记

异常抛出

​
#include <iostream>
#include <windows.h>
#include <fstream>
using namespace std;
double f(int x,int y){
    if(y==0){
        throw "被除数不能为0";
    }
    return x/y;
}
// 程序的主函数
int main()
{
    SetConsoleOutputCP(65001); 
    char data[100];
    int a=0;
    int b=1;
    try{
        f(b,a);
    }catch(const char* msg){
        cerr << msg << endl;
    }
    cin.ignore();
}



​

c++自学笔记

查看编译后的代码命令

注意,你开发的文件名被写错,博主的是index.cpp

gcc -E index.cpp > test.p

条件编译

#include <iostream>
using namespace std;
#define DEBUG
#define MIN(a,b) (a>b?a:b)
int main()
{
    int i=100,j=55;
#ifdef DEBUG
    cerr<< MIN(i, j)<<endl;
#endif
#if 0
    cout<<"1"<<endl;
#endif
}

c++自学笔记

#和##

#include <iostream>
using namespace std;
 
#define A( x ) #x
#define B( x,y ) x##y
int main ()
{
    int a=1;
    int ab=10;
    cout <<A(a)<< endl;
    cout <<B(a,b)<< endl;//变成ab
 
    return 0;
}

c++自学笔记

预定义宏 

#include <iostream>
#include <windows.h>
using namespace std;
 
int main ()
{
    SetConsoleOutputCP(65001);
    cout<<"第"<<__LINE__<<"行"<<endl;
    cout<<"文件名"<<__FILE__<<endl;
    cout<<"年月份"<<__DATE__<<endl;
    cout<<"时分秒"<<__TIME__<<endl;
}

c++自学笔记

信号处理

#include <iostream>
#include <csignal>
#include <unistd.h>
 
using namespace std;
 
void signalHandler( int signum )
{
    cout << "Interrupt signal (" << signum << ") received.\n";
 
    // 清理并关闭
    // 终止程序  
 
   exit(signum);  
 
}
 
int main ()
{
    // 注册信号 SIGINT 和信号处理程序
    signal(SIGINT, signalHandler);  
 
    while(1){
       cout << "Going to sleep...." << endl;
       sleep(1);
    }
 
    return 0;
}

c++自学笔记

 文章来源地址https://www.toymoban.com/news/detail-429059.html

#include <iostream>
#include <csignal>
#include <unistd.h>
 
using namespace std;
 
void signalHandler( int signum )
{
    cout << "Interrupt signal (" << signum << ") received.\n";
 
    // 清理并关闭
    // 终止程序  
 
   exit(signum);  
 
}
 
int main ()
{
    // 注册信号 SIGINT 和信号处理程序
    signal(SIGINT, signalHandler);  //外面用
    int i=0;
    while(++i){
       cout << "Going to sleep...." << endl;
       if(i==3){
            raise(SIGINT);//内部用
       }
       sleep(1);
    }
 
    return 0;
}

c++自学笔记

 

到了这里,关于c++自学笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unix教程_编程入门自学教程_菜鸟教程-免费教程分享

    UNIX / LINUX教程 Unix / Linux - 入门 Unix / Linux - 文件管理 Unix / Linux - 目录管理 Unix / Linux - 文件权限/访问模式 Unix / Linux - 环境 Unix / Linux基本实用程序 - 打印,电子邮件 Unix / Linux - 管道和过滤器 Unix / Linux - 进程管理 Unix / Linux - 网络通信实用程序 Unix / Linux - vi编辑器教程 Shell Scri

    2024年02月03日
    浏览(58)
  • CouchDB教程_编程入门自学教程_菜鸟教程-免费教程分享

    CouchDB教程 CouchDB - 简介 CouchDB - 安装 CouchDB - Curl和Futon CouchDB - HTTP API CouchDB - 创建数据库 CouchDB - 删除数据库 CouchDB - 创建文档 CouchDB - 更新文档 CouchDB - 删除文档 CouchDB - 附加文件 CouchDB - 有用的资源

    2024年02月10日
    浏览(41)
  • WPF教程_编程入门自学教程_菜鸟教程-免费教程分享

    WPF教程 WPF - 概述 WPF - 环境设置 WPF - Hello World WPF - XAML概述 WPF - Elements Tree WPF - 依赖属性 WPF - 路由事件 WPF - 控件 WPF - 布局 WPF - 布局嵌套 WPF - 输入 WPF - 命令行 WPF - 数据绑定 WPF - 资源 WPF - 模板 WPF - 样式 WPF - 触发器 WPF - 调试 WPF - 自定义控件 WPF - 异常处理 WPF - 本地化 WPF - 互

    2023年04月27日
    浏览(48)
  • Python教程_编程入门自学教程_菜鸟教程-免费教程分享

    Python - 教程 Python - 概述 Python - 环境设置 Python - 基本语法 Python - 变量类型 Python - 基本运算符 Python - 决策 Python - 循环 Python - 数字 Python - 字符串 Python - 列表 Python - 元组 Python - 字典 Python - 日期和时间 Python - 功能 Python - 模块 Python - 文件I / O. Python - 异常处理 Python - 面向对象

    2024年02月02日
    浏览(42)
  • CakePHP教程_编程入门自学教程_菜鸟教程-免费教程分享

    CakePHP教程 CakePHP - 概述 CakePHP - 安装 CakePHP - 文件夹结构 CakePHP - 配置 CakePHP - 电子邮件配置 CakePHP - 路由 CakePHP - 生成URL CakePHP - 重定向路由 CakePHP - 控制器 CakePHP - 视图 CakePHP - 扩展视图 CakePHP - 查看元素 CakePHP - 查看事件 CakePHP - 使用数据库 CakePHP - 查看记录 CakePHP - 更新记录

    2024年02月12日
    浏览(43)
  • JasperReports教程_编程入门自学教程_菜鸟教程-免费教程分享

    JasperReports - 编译报告设计 JasperReports - 填写报告 JasperReports教程 JasperReports - 入门 JasperReports - 环境设置 JasperReports - 生命周期 JasperReports - 设计 查看和打印报告 JasperReports - 导出报告 报告参数 报告数据源 报告字段 报告表达式 报告变量 报告部分 报告组 报告字体 Unicode支持 报

    2024年02月01日
    浏览(41)
  • Django教程_编程入门自学教程_菜鸟教程-免费教程分享

    Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。Django是高水准的Python编程语言驱动的一个开源模型.视图,控

    2024年02月15日
    浏览(56)
  • WCF教程_编程入门自学教程_菜鸟教程-免费教程分享

    WCF教程 WCF - 概述 WCF - 与Web服务对比 WCF - 开发人员工具 WCF - 架构 WCF - 创建WCF服务 WCF - 托管WCF服务 WCF - IIS主机 WCF - 自托管 WCF - WAS主机 WCF - Windows服务托管 WCF - 使用WCF服务 WCF - 服务绑定 WCF - 实例管理 WCF - 事务 WCF - Ria服务 WCF - 安全 WCF - 异常处理 WCF - 有用的资源

    2023年04月21日
    浏览(73)
  • CherryPy教程_编程入门自学教程_菜鸟教程-免费教程分享

    CherryPy 是一个使用 Python 编程语言的面向对象的 Web 应用程序框架。它旨在通过包装 HTTP 协议来快速开发 Web 应用程序,但保持在较低级别,并且提供的内容远不及 RFC 7231 中定义的内容。 CherryPy入门教程 - 从基本到高级概念的简单步骤了解CherryPy,包括简介,环境设置,词汇,

    2024年02月16日
    浏览(45)
  • Electron教程_编程入门自学教程_菜鸟教程-免费教程分享

    Electron是一个是使用JavaScript,HTML和CSS构建跨平台的桌面应用程序框架。 Electron 通过将 Chromium 和 Node.js 合并到同一个运行时环境中,并将其打包为 Mac,Windows 和 Linux 系统下的应用来实现这一目的。 Electron入门教程 - 从简单的步骤了解电子,从基本到高级概念,包括概述,简介

    2024年02月13日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包