IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++ -> 正文阅读

[C++知识库]C++

2022 7.14

城南小陌又逢春 ,只见梅花不见人。

输入输出流

输出流cout输入流cin

 #include <iostream>
  using namespace std;
   
  int main(int argc, char *argv[])
  {
      int a;
      double b;
      char s[100];
 
      cin>>a>>b>>s;
      cout<<"a="<<a<<"b="<<b<<"s="<<s<<endl;
      return 0;
  }

构造函数:

普通构造:默认普通构造,没有参数返回值。

拷贝构造:分为浅拷贝,深拷贝

移动构造:编译时需要加入连接-fno-elide-constructors

代码如下

/*===============================================
*   文件名称:constructor.cpp
*   创 建 者:月亮与六便士  
*   创建日期:2022年07月14日
*   描    述:
================================================*/
#include <iostream>
#include<cstring>
using namespace std;

class demo{
    public:
        //重写构造
        demo(char *q=nullptr)
        {
            str=new char[strlen("hello")+1];
            strcpy(str,q);
            cout<<"succesful x"<<endl;
    
        }
        //拷贝构造,深拷贝
        demo(const demo &obj)
        {
            str=new char[strlen(obj.str)+1];
            strcpy(str,obj.str);
            cout<<"succesful y"<<endl;
        }
        //移动构造
        demo( demo &&obj)
        {
            str = obj.str;
            obj.str=nullptr;
            cout<<"succesful z"<<endl;
        }
        char * getp(void);
        void get_addr(void);
        char &at(int n);
        void set(void);
    private:
        char *str;
        int len;
};
char * demo::getp(void)
{
    return str;
}

void demo::get_addr(void)
{
    
    printf("%p\n",str);
}
char & demo::at(int n)
{
    
       if(n>strlen(str)-1)
        {
            printf("erro\n");
        }
       //str[n]=str[n];
        return str[n];
}
void demo::set(void)
{
    char buf[32]={0};
    printf("plead input \n");
    fgets(buf,sizeof(buf),stdin);
    printf("%ld\n",strlen(buf));
    if(strlen(buf)>strlen(str))
    {
        delete str;
        str=new char[strlen(buf)+1];
        strncpy(str,buf,strlen(buf)-1);
        printf("change str:%s \n",str);
    }
    if(strlen(buf)<strlen(str))
    {
        strncpy(str,buf,strlen(buf)-1);
        printf("change str:%s \n",str);
    }
    //printf("change str:%s \n",str);
}
int main(int argc, char *argv[])
{ 
    char buf[32]="helloworld";
    int n=2; 
    demo x("hello");
    cout<<x.getp()<<endl;
    x.get_addr();
    puts("----------");
    cout<<x.at(2)<<endl;
    puts("----------");
    
    x.at(2)='m';
    printf("%c\n",x.at(n));

    cout<<x.getp()<<endl;
    puts("-----------------------\n");
    x.set();
    puts("-----------------------");

    demo y(x);
    cout<<y.getp()<<endl;

    demo z=buf;
    cout<<z.getp()<<endl;


    return 0;
    
} 

using namespace <>;

名词空间,把内域变成全局,

2022 7.15

析构函数

对象销毁时自动调用函数,它可以显示调用

~类名(void)

注意:1.当存在移动构造时,需要在释放空间之前判断是否是临时变量
?? ??? ??? ? ?如果时临时变量那么就不释放空间
?? ??? ??? ? ?2.使用析构显示调用时需要注意重复释放的问题

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

class String{
	
	public:
		//普通构造
		String(const char*p)
		{
			/*
			if(nullptr == p)
				异常处理
			*/
			cout<<"normal"<<endl;
			addr = new char[strlen(p)+1];  //开辟空间
			strcpy(addr, p);
			len = strlen(p);
		}
		//深拷贝
		String(const String & obj)
		{
			cout<<"cpy"<<endl;
			addr = new char[strlen(obj.addr)+1];
			strcpy(addr,obj.addr);
			len = obj.len;
		}
		//移动构造
		String(String && obj)
		{
			cout<<"move"<<endl;
			addr = obj.addr;
			obj.addr = nullptr;
			len = obj.len;
		}
       //析构函数
        ~String()
        {
            cout<<"delte"<<endl;
            if(addr != nullptr)
            {
                delete []addr;
                addr = nullptr;
            }
        }
		char &at(const int id)   //因为需要通过返回值修改成员变量所以使用引用
		{
			return addr[id];			
		}
		
		char* get_addr()
		{
			return addr;
		}
		
		void setval(const char* p)
		{
			
			if(strlen(p) > len)
			{
				//p大于原来的空间,应该重新开辟一个空间
				delete []addr;
				addr = new char[strlen(p)+1];
				
				strcpy(addr, p);
				len =  strlen(p);
			}
			else
			{
				strcpy(addr, p);
				len =  strlen(p);
			}
		}
		
		void append(const char* p)
		{
			char buf[len+1];    //存储原始数据
			strcpy(buf, addr);
			delete []addr;
			addr = new char[len+strlen(p)+1];
			
			strcpy(addr, buf);
			strcat(addr, p);
			len += strlen(p); 
		}
	private:
		char *addr;
		int len;
};

void test()
{
    char buf[100] = "hello";
    String A = buf;

}

int main()
{
    test();
    while(1);
}

关键字?

static

? ? 1.修饰变量
?? ??? ??? ??? ?1.全局变量,生命周期不变,作用域被限制在本文件
?? ??? ??? ??? ?2.局部变量, 延长声明周期到程序结束,作用域不

? ? 2.修饰函数
? ? ? ? ? ? ? ? ?声明周期不变,作用域限制在本文件
? ? ? ? ??
? ? 3.修饰类相关
? ? ? ? ? ? ? ? ?特点:静态成员,不和具体对象关联,没有对象生成静态成员也存在
?? ??? ??? ??? ??? ? ?静态成员不属于类,多个对象公用一个静态成员
?? ??? ??? ??? ??? ? ?静态成员使用之前必须初始化 类型+类名::变量名=n;
?? ??? ??

? ??? ??? ? ?
const? ? ? ?

? ? ? ?


?? ??? ?1.const修饰成员变量
?? ??? ??? ?1.修饰的变量不能被更改,const修饰的变量需要初始化
?? ??? ??? ?2.const修饰的成员变量,必须使用初始化列表进行初始化
?? ??? ??? ?3.非const成员函数可以访问,const成员变量
?? ??? ??? ?初始化列表
?? ??? ??? ?1.可以初始化const修饰的变量,也可以初始化非const修饰的变量
?? ??? ??? ??? demo(int n, char c , int *p)?

? ? ? ? ? ? ? :a(n),ch(c),b{p[0], p[1], p[2]}

? ? ? ? ? ? ? ?{}

?//初始化列表格式,分别对int,char,数组,进行的初始化
?? ??? ???
??
?? ??? ??
?? ??? ?2.const修饰函数
?? ??? ??? ?格式: 返回值 函数名()const;
?? ??? ??? ?1.const修饰的函数可以访问非const成员
?? ??? ??? ?2.const修饰的函数可以访问const成员
?? ??? ??? ?3.函数内部不能出现修改成员变量值的逻辑出现
?? ??? ??? ?
? ? ? ??
?? ??? ?3.const修饰类
?? ??? ??? ?const修饰的对象,只能调用对象的const修饰的成员函数
?? ??? ?

? ? ??

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:02:42  更:2022-07-17 16:07:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/12 21:27:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码