String类型_static成员_动态内存分配_拷贝构造函数_const关键字_友元函数与友元类
1:String类型


#include <iostream>
using namespace std;
int main()
{
//初始化方法
string s1 = "hello";//默认构造方法
string s2(s1);//将s2初始化为s1的一个副本
string s3("value");//将s3初始化为字符串的副本
string s4(,'x');//将字符串初始化为字符x的10个副本
cout << s1 << "\t" << s2 << "\t" << s3 << "\t" << s4 << "\t" << endl;
//hello hello value xxxxxxxxxx
//string操作 cout << s1.empty() << endl;//判断字符串是否为空
cout << s1.size() << endl;//字符串大小
cout << s1[] << endl;//字符串的第0个字符
cout << s1 + s3 << endl;//拼接
cout << (s1 == s2) << endl;//判断是否相同
s1 = s3;//赋值
cout << (s1 == s2) << endl; return ;
}
2:static成员

关于static的详细内容可看这篇博客:C++中static关键字作用总结
总的来说static有四个主要作用:
1:隐藏。(static函数,static变量均可)
A.cpp
#include <bits/stdc++.h>
using namespace std;
char a = 'A';//加上static可以实现对变量a的数据隐藏
void show()//加上static可以实现对函数show的数据隐藏
{
cout << "我来自A.cpp文件,是一个全局函数" << endl;
} main.cpp
#include <iostream>
using namespace std;
int main()
{
/*
由于编译是对单个的文件进行编译,所以在编译一个a.cpp文件的时候,
若是要在a.cpp中使用b.cpp中的变量,直接使用则编译肯定会报错的,
所以这个时候应该永extern修饰在a.cpp中所使用的b.cpp中的变量,
这个时候编译器会忽略这个错误,直到链接的时候("将文件融为一体")
会找到b.cpp中的变量,这样便ok了。extern的作用相当于让编译器在编译
阶段忽略这个错误
extern 的用法可以参考 https://blog.csdn.net/pql925/article/details/82178476
*/
extern char a;//声明要引用的变量的名称
cout << a<< endl;//a是全局变量,可以在不同文件里面引用
extern int show();//声明要引用的方法的名称。
show();//show是全局函数,可以在不同文件里面引用
return ;
}
2: 保持变量内容的持久。(static变量中的记忆功能和全局生存期)
#include <iostream>
using namespace std;
void show()
{
static int a = ;//a只能被初始化一次,其他的初始化无效
a--;
cout << a <<"\t" ;
}
int main()
{
for(int i = ; i < ;i++)
{
show();
}//9 8 7 6 5 4 3 2 1 0
return ;
}
3: static的第三个作用是默认初始化为0(static变量)
#include <iostream>
using namespace std;
void show()
{
static int a;//默认为0
cout << a <<"\t" ;//
}
int main()
{
show();
return ;
}
4: 类的静态成员函数是属于整个类而非类的对象,所以它没有this指针,这就导致 了它仅能访问类的静态数据和静态成员函数。
public:
void static show()
{
height = ;//静态方法里只能有静态成员或函数
age = ;//报错。。
}
protected: private:
string color;
int age;
static int height;
3:动态内存分配







malloc在堆上分配的内存块,使用free释放内存,而new所申请的内存则是在自由存储区上,使用delete来释放

相关内存分配知识可看一下这几篇博客:
https://blog.csdn.net/questionhahaha/article/details/89462925
https://blog.csdn.net/ladybai/article/details/51234300
https://blog.csdn.net/qq_40416052/article/details/82493916
4:拷贝构造函数


5:const关键字

#include <bits/stdc++.h>
using namespace std ; int main()
{
const int a = ;
//a = 2; //报错,a是只读的
int b = ; const int *p = &a;
//*p = 2; //报错,const在*左边,指针所指的值不可以直接修改。
p = &b; //正确,const在*左边可以修改指针所指的地址 int* const p2 = &b;
*p2 = ; //正确,const在*右边可以修改指针的值
//p2 = &b; //错误,const在*右边不可以修改指针所指的地址 return ;
}

#include <bits/stdc++.h>
using namespace std ;
class Data{
public:
Data():SIZE()//const变量要进行初始化列表
{
val = ;
}
int getValue() const
{
//int val++; //报错,const声明的函数,局部变量不能修改。
return val;
}
private:
const int SIZE;
int val;
};
int main()
{
Data data;
cout << data.getValue();
return ;
}

后一个效率更高,避免了一次拷贝构造
6:友元函数与友元类


String类型_static成员_动态内存分配_拷贝构造函数_const关键字_友元函数与友元类的更多相关文章
- C++内存分配和拷贝构造函数写研究
昨晚参加笔试,开错题,有印象中的概念,但目前尚不清楚是怎么回事,什么原理,导致错误的话题.现在总结. 一.C++写内存分配研究 问题考察例如以下,请先不要看答案,看看你是否能做对,呵呵: waterm ...
- 动态内存分配(C++)
C++中的动态内存分配 C++中通过new关键字进行动态内存分配 C++中的动态内存申请是基于类型进行的 delet关键字用于内存释放 //变量申请 Type*pointer = new Type; ...
- C++_类和动态内存分配3-构造函数中使用new的注意事项
如果在构造函数中使用new来初始化对象的指针成员时必须特别小心. 1 如果在构造函数中使用new来初始化指针成员,则应在析构函数中使用delete. 2 new和delete必须相互兼容.new对应于 ...
- C++_类继承6-继承和动态内存分配
如果基类使用动态内存分配,并重新定义赋值和复制构造函数,这将怎样影响派生类的实现?这个问题的答案取决于派生类的属性.如果派生类也使用动态内存分配,那就需要注意学习新的小技巧. 派生类不适用new // ...
- 布尔类型、操作符别名、C++函数、动态内存分配(new\delete)、引用(day02)
六 C++的布尔类型 bool类型是C++中基本类型,专门表示逻辑值:true/false bool在内存上占一个字节:1表示true,0表示false bool类型可以接收任意类型和表达式的结果,其 ...
- C和C指针小记(十六)-动态内存分配
动态内存分配 1.1 为什么使用动态内存分配 直接声明数组的方式的缺点: 1) 声明数组必须指定长度限制.无法处理超过声明长度的数组. 2) 如果声明更大的常量来弥补第一个缺点,会造成更多的内存浪费. ...
- C++ 动态内存分配(6种情况,好几个例子)
1.堆内存分配 : C/C++定义了4个内存区间: 代码区,全局变量与静态变量区,局部变量区即栈区,动态存储区,即堆(heap)区或自由存储区(free store). 堆的概念: 通常定义变量(或对 ...
- [UE4]C++ 动态内存分配(6种情况,好几个例子)
1.堆内存分配 : C/C++定义了4个内存区间: 代码区,全局变量与静态变量区,局部变量区即栈区,动态存储区,即堆(heap)区或自由存储区(free store). 堆的概念: 通常定义变量(或对 ...
- 《C++ Primer Plus》读书笔记之十—类和动态内存分配
第12章 类和动态内存分配 1.不能在类声明中初始化静态成员变量,这是因为声明描述了如何分配内存,但并不分配内存.可以在类声明之外使用单独的语句进行初始化,这是因为静态类成员是单独存储的,而不是对象的 ...
随机推荐
- debian 源设置 ( apt-get 不能安装)
使用说明 以Jessie为例, 编辑/etc/apt/sources.list文件, 在文件最前面添加以下条目(操作前请做好相应备份) deb http://mirrors.163.com/debia ...
- 2019 USP Try-outs 练习赛
// 好久没更博客了,最近打了很多场练习赛&校内PK赛,大概自闭忙于补题吧 // 9.26 周四练习赛 A. Kolkhozy 题意 有 n 个数 \(f[i]\) ,有 q 次询问(l, r ...
- 剑指offer——30包含min函数的栈
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 题解: 借助辅助栈,新的数据<=f辅助栈顶时,就压入辅助栈,这样,就能保证辅 ...
- BAT大神推荐:看懂英文文档,每天只需要10分钟做这件事……
程序员这个行业是很特殊的.之所以说特殊,就是因为它所有的技术大多来自欧美,所以最主流,最新鲜,最正确的技术文章都是英文,遗憾的是,大部分还没有译本. 有些译文还比较差.与其等待别人的翻译,不如直接阅读 ...
- 【POJ】1251 Jungle Roads
题目链接:http://poj.org/problem?id=1251 题意:n个村庄字母标号,每个字母后跟m个字母,表示该字母到mi的距离.求构建所有村庄道路的最短距离. 题解:最小生成树裸题.注意 ...
- asp.net Core 使用redis(StackExchange.Redis)
原文:asp.net Core 使用redis(StackExchange.Redis) 一.添加配置(appsettings.json) "Redis": { "Def ...
- 关于__init__.py
假设程序目录结构如下: ├── checkpoints/ ├── data/ │ ├── __init__.py │ ├── dataset.py │ └── get_data.sh ├── mode ...
- Dribbble 流行的配色风格是什么?
Dribbble 是众所周知的设计社群网站,在网站中有许多人分享设计作品,互相交流或从其他设计获取灵感.当然也有不少网站应运而生,例如 Freebbble 可免费下载 Dribbble 数千种设计素材 ...
- Docker学习のDocker和虚拟机
最初听到Docker,是作为虚拟机来宣传的,但是它本质不是虚拟机 一.虚拟机 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的.运行在一个完全隔离环境中的完整计算机系统. ...
- thinkphp rabc权限总结
今天晚上把ThinkPHP的权限分配弄明白了,心里的包袱立刻放下了,感觉那个爽啊!稍微记录一下. 背景:CMS系统开发(17do). 项目分组:Admin(后台管理).Home(前台显示). Admi ...