关于C++默认代码与C的一些不同的认识
#include <iostream>
//#include 头文件 :C++标准库中的头文件都不带.h
#include <cstdio>
#include <cstring>
using namespace std;
int main(int argc, char** argv) {
cout << "Hello World!" <<endl;
// <<是一个运算符重载函数operator << (形参列表)
// cout << 相当于cout.operator<<(实参),相当于C库函数printf
//C库的输入函数:scanf
//在C++中的输入函数 cin >> 相当于scanf
//在C++中表示字符串有了专门的类型:string类型
//在C中字符串没有类型,只有表现形式:字符指针,字符数组。需注意容量及尾部\0的问题
string name;
cin >> name;
cout << name << endl; //endl相当于一个\n
return 0;
}
命名空间
利用关键字namespace去定义自己的名字空间
namespace + 名字空间标识符
{
//在自定义的命名空间中定义自己的变量或函数或类
}
所有的名字空间就是在全局空间中定义的,相当于是在全局空间中又定义一个不同名字的全局作用域。
如何访问不同命名空间中的变量或函数呢?
使用 域名访问符:: 来访问指定空间中的变量或函数名或类。
#include <iostream>
//#include 头文件 :C++标准库中的头文件都不带.h
#include <cstdio>
#include <cstring>
using namespace std;
namespace A
{
int a = 100;
void show()
{
cout << "加油!!!" << endl;
}
}
namespace B
{
int a = 500;
void show()
{
cout << "欢迎大家来到华清远见学习" << endl;
}
}
//嵌套的名字空间
namespace C
{
namespace D
{
int a = 2000;
void show(){
cout << "nihao" << endl;
}
}
}
int main(int argc, char** argv) {
//访问命名空间中变量的方式: 名字空间名 + ::
//指定访问某个名字空间中的变量或函数
cout << A::a <<endl;
cout << B::a <<endl;
A::show();
B::show();
//对于嵌套的名字空间,使用::逐级访问
cout << C::D::a <<endl;
C::D::show();
return 0;
}
using关键字:导入标识符
导入具体的标识符:
使用using + 名字空间名 + 具体的哪个变量或函数或类的名字标识符。
using A::a;
cout << a << endl;
导入名字空间中的所有标识符:using + namespace + 哪个名字空间
C++中的struct结构体与字符串
C++中的结构体与C中结构体的区别:
C中使用结构体:不可以直接在结构体内部定义函数,只能通过函数指针的方式间接调用一个全局函数的形式来表示。
#include <stdio.h>
struct Stu
{
char* name;
int age;
void (*pfun)();
};
void write_code()
{
printf("正在努力地写代码\n");
}
int main() {
struct Stu stu = {"zhangsan",20,write_code};
printf("%s\n",stu.name);
printf("%s\n",stu.age);
//通过函数指针的回调调用一个全局函数来表示stu这个(结构体变量)对象的行为
stu.pfun();
return 0;
}
C++中的结构体:多了封装性,只不过默认采用的公有的访问权限public。
#include <iostream>
using namespace std;
struct Stu
{
public: //公有访问权限
string name;
int age;
//private: //私有访问权限
//把定义在结构体内部的函数称为成员函数
void write_code()
{
printf("正在努力地写代码\n");
}
};
int main(int argc, char** argv) {
Stu stu = {"zhangsan",20};
cout << stu.name <<endl;
cout << stu.age <<endl;
stu.write_code();
return 0;
}
C++中的结构体大小与非静态属性有关,同时遵从C中的结构体对齐原则,与结构体中成员函数无关。因为C++中的类就是从C中的结构体衍生而来。
认识C++中string类
C中是没有字符串类型,只有字符串的表示形式:1.字符指针;2.字符数组。
在C使用字符串要注意:字符长度和\0的问题。
在C++的面向对象这个世界中,对于底层数据元素操作,我们把这个底层操作封装起来,成为了专属性字符串类型。
string的API的使用:
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
string name1 = "zhugeliang";
cout << name1 << endl;
string name2 = "zhangsan";
//at()接口
cout << name2.at(2) << endl;
//cout << name2.at(100) << endl; //会报越界异常
//size()接口
cout << name2.size() << endl;//8
//[]中括号运算符函数的重载
cout << name2[1] << endl;//h
//在使用string定义的字符串,当访问指定的字符时,我们更推荐使用at,因为at有边界检查
cout << name2[100] <<endl;
cout << name1 + name2 << endl;
string str = name1 += name2;
cout << str << "," << name1 << endl;
//append()接口
string str2 = name2.append(",nihao");
cout << str2 << "|" << name2 << endl;
return 0;
}
C++中bool变量,&取址符,const修饰符
C++中的bool变量
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
//定义一个布尔变量,在C中以0为假,非0为真,即使是个负数也是为真
//在C++中我们表示布尔有了专门的一个布尔类型,内置类型,用bool表示。
bool ok;
ok = true;
cout << ok << endl; //1为真
ok = false;
cout << ok << endl; //0为假
cout << sizeof(bool) << "B(字节)" << endl; //1B
return 0;
}
&取址符回顾与拓展