【C++】基础及引用
输出
#include "iostream" //包含c++的头文件 //iostream.h
using namespace std; //使用命名空间 std 标准的命名空间 (在这个命名空间中定义了很多标准定义)
void main()
{
//printf("hello....\n");
//cout 标准输出 黑屏幕,
//<< 左移操作符 在c++里面 功能的改造(增强)===>C++ 语言操作符重载 //3day
//endl \n
//打印到屏幕 并且换行
cout << "hello...."<<endl;
system("pause");
}
求圆面积
//在C++中 定义了一个自定义数据类型 MyCicle 圆形
class MyCicle
{
public:
double m_s; //圆的面积 属性 成员变量
double m_r; //圆的半径 public:
void setR(double r) //成员函数
{
m_r = r;
} double getR() //成员函数
{
return m_r;
}
double getS()
{
m_s = 3.14*m_r*m_r;
return m_s;
}
}; // void main03()
{
MyCicle c1, c2, c3; //用类 定义 变量 对象
double r;
cout << "请输入c1圆形的半径:";
cin >> r; //给c1圆形的属性赋值
c1.setR(r); cout << "c1圆形的面积是:" << c1.getS()<<endl; system("pause");
} //用面向对象的方法
//1 类的抽象 成员变量和成员函数
//2 实例化 类的对象
//3 求面积
//面向过程加工的是 一个一个的函数
//面向对象加工的是:一个一个的类
//4 main集成测试
//思考1:类的调用 执行过程分析==>类代码不是一步一步指向
//类是一个数据类型,(固定大小内存块的别名); 定义一个类,是一个抽象的概念,不会给你分配内存
//用数据类型定义变量的时候,才会分配内存
//思考2:抛砖: c++编译器是如何处理 多个对象,调用类的成员函数的;具体一点:如何区分是c1 c2 c3 调用了getS,抛砖.....
定义变量的时候,初始值就已经固定下来了,后面需要调用函数才能改变成新的值,成员函数只有调用了才会执行
所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。
命名空间std封装的是标准程序库的名称,标准程序库为了和以前的头文件区别,一般不加".h"
当使用<iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。
命名空间
#include "iostream"
using namespace std; namespace namespaceA
{
int a = ;
} namespace namespaceB
{
int a = ;
namespace namespaceC
{
struct Teacher
{
char name[];
int age;
};
}
} void main()
{
using namespace namespaceA;
using namespace namespaceB;
cout << namespaceA::a << endl;
cout << namespaceB::a << endl; namespaceB::namespaceC::Teacher t1;
t1.age = ;
system("pause");
}
1) 当使用<iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std;这样才能正确使用cout。若不引入using namespace std ,需要这样做。std::cout。
2) c++标准为了和C区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。
3) C++命名空间的定义: namespace name { … }
4) using namespace NameSpaceA;
5) namespce定义可嵌套。
C++增强部分
1.C语言中的变量都必须在作用域开始的位置定义!!
C++中更强调语言的“实用性”,所有的变量都可以在需要使用时再定义。
2.register关键字增强
C语言中无法取得register变量地址
在C++中依然支持register关键字
C++编译器有自己的优化方式,不使用register也可能做优化
C++中可以取得register变量的地址
3.变量检测增强
在C语言中,重复定义多个同名的全局变量是合法的
在C++中,不允许定义多个同名的全局变量
C语言中多个同名的全局变量最终会被链接到全局数据区的同一个地址空间上
4.struct类型加强
C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型
C++中的struct是一个新类型的定义声明
5.C++中所有的变量和函数都必须有类型
6.新增bool类型
true代表真值,编译器内部用1来表示
false代表非真值,编译器内部用0来表示
负数也是true
在C语言中,表达式返回的是一个数值
在C++中,表达式返回的是变量本身
const在C++中是一个真正的常量,在C中可以通过指针修改
const int c = 5; 约等于 #define c 5
引用可以看做一个已定义变量的别名(C语言没有引用)
#include<iostream>
using namespace std; void main() {
int a = ;
//引用的语法:Type& name = var
int &b = a;
b = ;//相当于把a修改成100了
printf("b:%d \n", b);
printf("a:%d \n", a);
system("pause");
}
普通引用在声明时必须用其它的变量进行初始化
struct Teacher
{
char name[];
int age ;
}; void printfT(Teacher *pT)
{
cout<<pT->age<<endl;
} //pT是t1的别名 ,相当于修改了t1
void printfT2(Teacher &pT)
{
//cout<<pT.age<<endl;
pT.age = ;
} //pT和t1的是两个不同的变量
void printfT3(Teacher pT)
{
cout<<pT.age<<endl;
pT.age = ; //只会修改pT变量 ,不会修改t1变量
}
void main()
{
Teacher t1;
t1.age = ; printfT(&t1); printfT2(t1); //pT是t1的别名
printf("t1.age:%d \n", t1.age); // printfT3(t1) ;// pT是形参 ,t1 copy一份数据 给pT //---> pT = t1
printf("t1.age:%d \n", t1.age); // cout<<"hello..."<<endl;
system("pause");
return ;
}
引用的本质
#include <iostream>
using namespace std;
void main() {
int a = ;
int &b = a;
cout << &a<<endl;
cout << &b<<endl;
system("pause");
}
a和b是同一块内存空间的门牌号,引用也占空间(4个字节,和数据类型没关系)
引用在C++内部就是一个常量指针&a a=5 == *const a *a=5
#include <iostream>
using namespace std; void modifyA(int &a) {
a = ;
} void modifyB(int * const a) {
*a = ;
} void main() {
int a = ;
modifyA(a);
cout << a<<endl; a = ;
modifyB(&a);
cout << a<<endl;
system("pause");
}
间接赋值成立的三个条件
1定义两个变量 (一个实参一个形参)
2建立关联 实参取地址传给形参
3*p形参去间接的修改实参的值
引用在实现上,只不过是把:间接赋值成立的三个条件的后两步和二为一(当实参传给形参引用的时候,只不过是c++编译器帮我们程序员手工取了一个实参地址,传给了形参引用(常量指针))
若返回栈变量,不能成为其它引用的初始值
函数返回若是一个引用,可以当左值
#include <iostream>
using namespace std; int& g2() {
static int a = ;
a++;
cout << a << endl;
return a;
} void main() {
g2() = ;
g2();
system("pause");
} 输出
【C++】基础及引用的更多相关文章
- 【转载】 Java 7之基础 - 强引用、弱引用、软引用、虚引用
原文地址:http://blog.csdn.net/mazhimazh/article/details/19752475 1.强引用(StrongReference) 强引用是使用最普遍的引用.如果一 ...
- Java 7之基础 - 强引用、弱引用、软引用、虚引用
1.强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.如下: Object o=new Object(); // 强引用 当内 ...
- C++基础之引用与指针的区别与联系、常引用使用时应注意的问题
什么是引用? 引用就是对变量起一个别名,而变量还是原来的变量,并没有重新定义一个变量.例如下面的例子: #include<iostream> using namespace std; ...
- Java基础之引用(String,char[],Integer)总结
1.String的引用: 下列代码执行后的结果为: public class Test { public static void main(String[] args) { StringBuffer ...
- Java基础之引用(String,char[],Integer)总结于牛客网的专项练习题
1.String的引用: 下列代码执行后的结果为: public class Test { public static void main(String[] args) { StringBuffer ...
- c++基础之引用reference
1.何为引用 简单来说就是,比如你换了个新名字,用新名字叫你,你也会答应 2.引用vs指针 -引用没有null,好比你说你换了个新名字,但是新名字是啥总得有点东西 -一旦引用被初始化后就不可以指到另外 ...
- C++语言基础(8)-引用
(重要)使用引用的一些注意点: 1.引用不能绑定临时数据,也不能绑定任何无法获取内存地址的常量,表达式,或值,常引用除外. 第一种写法:(错误) int func_int(){ ; return n; ...
- Java基础 - 强引用、弱引用、软引用、虚引用
1.强引用(StrongReference) 强引用是使用最普遍的引用. 假设一个对象具有强引用.那垃圾回收器绝不会回收它.例如以下: [java] view plaincopyprint" ...
- java基础(4):引用数据类型、流程控制语句
1. 引用数据类型 1.1 Scanner类 我们要学的Scanner类是属于引用数据类型,我们先了解下引用数据类型. 引用数据类型的使用: 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有 ...
随机推荐
- 状压DP的总结
状压dp的标志 ①数据小 ②通过题目所给出的条件以后得到的特征集合小 一:CF259div2 D: 题目大意:保证b[i]中每个数互质,给出a[i],然后求1~n的abs(a[i]-b[i])最小.a ...
- 动态规划:LIS
题目中的严格二字,表示的意思是不允许≥或者是≤的情况出现,只允许>的情况以及<的情况 经典问题是NOIP合唱队形,在这个题目中,既求了最长上升子序列,也求了最长下降子序列 其最终的结果由两 ...
- 插入排序Insertion sort 2
原理类似桶排序,这里总是需要10个桶,多次使用 首先以个位数的值进行装桶,即个位数为1则放入1号桶,为9则放入9号桶,暂时忽视十位数 例如 待排序数组[62,14,59,88,16]简单点五个数字 分 ...
- 【BZOJ】2190 [SDOI2008]仪仗队
[算法]欧拉函数 欧拉线性筛 [题解]将图从左至右,从下至上,分别标号0~n-1. 除了坐标0,一个点会被观察到当且仅当其坐标(i,j)的i与j互质,否则会被(i/d,j/d)挡住. 所以累加2~n- ...
- Spring cookie 实战(山东数漫江湖)
Cookie是什么 简单来说,cookie就是浏览器储存在用户电脑上的一小段文本文件.cookie 是纯文本格式,不包含任何可执行的代码.一个web页面或服务器告知浏览器按照一定规范来储存这些信息,并 ...
- HDU 1574 RP问题 (dp)
题目链接 Problem Description 在人类社会中,任何个体都具有人品,人品有各种不同的形式,可以从一种形式转换为另一种形式,从一个个体传递给另一个个体,在转换和传递的过程中,人品不会消失 ...
- 新建一个express工程,node app无反应
1.问题描述 新建一个express工程,node app以后无反应,浏览器输入localhost:3000,显示如下 2.解决方法 在app.js文件中加入如下代码 app.listen(3000, ...
- JDBC+Servlet+JSP实现基本的增删改查(简易通讯录)
前言: 最近学习JavaWeb的过程中,自己实践练手了几个小项目,目前已经上传到我的Github上https://github.com/Snailclimb/JavaWebProject.目前只上传了 ...
- c语言中网络字节序和主机字节序的转换
函数说明 相关函数:htonl, htons, ntohl 头文件:#include <netinet/in.h> 定义函数:unsigned short int ntohs(unsi ...
- python中的ftplib模块
前言 Python中默认安装的ftplib模块定义了FTP类. ftplib模块相关参数: 加载ftp模块:from ftplib import FTP ftp = FTP()#设置变量ftp.set ...