第二天学习
1.输入输出
1.C语言的输入输出
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
//c语言的输出
printf("HelloWorld\n");
//输入
int a = 0;
scanf("%d\n", &a);
printf("%d\n", a);
return 0;
}
2.C++的输入和输出
#include <iostream>
#include <stdio.h>
using namespace std;
void main()
{
cout << "Hello" << endl;
printf("world\n");
int a = 0;
cin >> a;
cout << a << endl;
system("pause");
}
1.第一个是我们#include他引用了没有.h文件这个是我们C++的头文件,后面我们也看到我一样可以使用stdio.h这个相信大家已经非常熟悉的它就C语言的头文件,现在通过这个程序来看看他们的区别。
2.有一个using namespace std它的名字叫命名空间,后面我们会讲它的一些使用,为什么会有这个东西。
3.C++的输出cout<<"Hello"<<endl;这个就是我们的输出语句,但是我们看到有一个东东<<这个在C语言代表左移,但是在这里我们发现它似乎有变化,这个就是我们后面要学习的运算符重载。
4.输入cin>>这个是输入。和我们之前的scanf完全不一样,之前我们看是要传入地址,现在不用了,直接cin>>a这样就够了。
2.求圆的面积
1.面向过程
#define _CRT_SECURE_NO_WARNINGS
#define PI 3.14
#include <stdio.h>
#include <stdlib.h>
//求出圆的面积面向过程求法
int getS(int r)
{
int s = 0;
s = PI * r * r;
return s;
}
int main()
{
//定义变量
int m_r = 0;
int m_s = 0;
//要求用户输入半径
printf("请输入圆的半径:");
scanf("%d", &m_r);
m_s = getS(m_r);
printf("s = %d\n", m_s);
system("pause");
return 0;
}
2.面向对象
#include <iostream>
#include <stdio.h>
#define PI 3.14
using namespace std;
//c语言结构体
struct Circle
{
double m_r;//半径
double m_s;//面积
void setR(int r)
{
m_r = r;
}
double getS()
{
m_s = PI * m_r * m_r;
return m_s;
}
};
void main()
{
int m_r;
cout << "请输入半径:";
cin >> m_r;
Circle cr;
cr.setR(m_r);
double sss = cr.getS();
cout << "s = " << sss << endl;
system("pause");
}
这个程序中大多数的地方相信大家都能看懂,只是在结构体中,C语言我们知道是不能有函数,而我们C++对它进行了扩充并且可以有函数的存在。
3.易犯错的模型
#include <iostream>
#include <stdio.h>
#define PI 3.14
using namespace std;
//c语言结构体
struct Circle
{
double m_r;//半径
double m_s = PI * m_r * m_r;//面积
};
void main()
{
Circle cr;
cout << "请输入半径:";
cin >> cr.m_r;
cout << "s = " << cr.m_s << endl;
system("pause");
}
这个模型我们可以看到最后的模型最后得到的数据和我们预想的不一样,这个原因就是我们初始化的时候已经就是乱码了。我们可以修改一下代码如下
#include <iostream>
#include <stdio.h>
#define PI 3.14
using namespace std;
//c语言结构体
struct Circle
{
double m_r;//半径
double m_s = 0;//面积
};
void main()
{
Circle cr;
cout << "请输入半径:";
cin >> cr.m_r;
cr.m_s = PI * cr.m_r *cr.m_r;
cout << "s = " << cr.m_s << endl;
system("pause");
}
4.结构体与类的区别
#include <iostream>
#include <stdio.h>
#define PI 3.14
using namespace std;
//c语言结构体
struct Circle
{
double m_r;//半径
double m_s = 0;//面积
};
//类
class CircleTest
{
double m_r;//半径
double m_s = 0;//面积
};
void main()
{
Circle cr;
cout << "请输入半径:";
cin >> cr.m_r;
cr.m_s = PI * cr.m_r *cr.m_r;
cout << "s = " << cr.m_s << endl;
//类
CircleTest cr1;
cr1.m_r = 10;
system("pause");
}
我们可以看到class创建了一个类(这个以后我们在继续说)
然后我们看到cr是一个结构体,cr1是一个类,我们可以看到cr1.m_r会报错。
总结:
结构体和类基本上一样,只是在访问的权限有区别。
C++和C的结构体也是有区别的,C结构体没有函数。
5.namespace
1.使用
using namespace
2.定义
namespace 名字
#include <iostream>
#include <stdio.h>
#define PI 3.14
using namespace std;
namespace hello{
int a = 10;
};
namespace world{
int a = 100;
}
void main()
{
using namespace hello;
using namespace world;
cout << "hello = " << hello::a <<endl;
cout << "world = " << world::a << endl;
system("pause");
}
它的主要作用就是让每一个区域类就算名字一样得到的结果也是不一样,不会出现名字冲突。与java的包大概差不多。
6.bool类型
bool类型是C++的类型,数值只有false和true和我们其他的变量本质差不多。
7.三目运算符
1.C语言的三目运算符
#define _CRT_SECURE_NO_WARNINGS
#define PI 3.14
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 10;
int b = 2;
(a < b ? a : b) = 30;
system("pause");
return 0;
}
这里它报错:会说=左操作必须是左值,就是说我们没有办法直接使用变量a或者b作为变量。然后我们把这个直接赋值C++里面代码如下
#include <iostream>
using namespace std;
void main()
{
int a = 10;
int b = 2;
(a < b ? a : b) = 30;
cout << a << endl;
system("pause");
}
我们发现这个好像是可以使用的,并且我们也可以看到a的数值,然后我们想想C能不能得到这样的结果了,我们发现如果通过地址的话,我们也可以得到刚才的效果。
#define _CRT_SECURE_NO_WARNINGS
#define PI 3.14
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a = 10;
int b = 2;
*(a < b ? &a : &b) = 30;
printf("%d\n", *(a < b ? &a : &b));
system("pause");
return 0;
}
8.const
1.相同点
与C相同的地方就是修饰变量以后
Const int a =10;
a = 20;
Int const b = 20;
b = 30;
重点指针作为函数参数
Void getMem(char **myp)
{
Char *p = (char*)malloc(100);
*my = p;//保证能够修改才行
}
void main()
{
Char buf[20];
getMem(&buf);
}
2.不同直接修改A不可以,但是可以间接修改
C++const 不再是一个冒牌货
C++的const他类似于宏定义
不同的地方#define它是预处理,单纯的文本替换
#define 不管放在那里都可以当成全局变量
#undef是关闭掉后面可以有参数如果参数为定义过的宏
9.引用
引用:就是为一个变量在取一个别名
Type &b = a;//b就是a的别名
直接赋值与间接赋值
引用的基本使用
Int a = 10;
Int &b = a;
B = 20;
Cout<<b<<endl;
引伸
引用是C++的语法。
引用的本质:
1.引用是一个只读的常量
2.在一定的基础上可以代替指针
实例
在结构体进行测试引用是否有空间有内存
#include <iostream>
using namespace std;
struct MyStruct
{
int &a;
int &b;
int c;
};
void main()
{
cout << sizeof(MyStruct) << endl;
system("pause");
}
代码如下
#include <iostream>
using namespace std;
void showMsg(int &a)
{
a = 10;
}
void showMsg1(int *a)
{
*a = 100;
}
void main()
{
int a = 1;
showMsg(a);
cout << a << endl;
showMsg1(&a);
cout << a << endl;
system("pause");
}
本质其实就是一个常量的指针与指针的大小是相同的。