输出

#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++】基础及引用的更多相关文章

  1. 【转载】 Java 7之基础 - 强引用、弱引用、软引用、虚引用

    原文地址:http://blog.csdn.net/mazhimazh/article/details/19752475 1.强引用(StrongReference) 强引用是使用最普遍的引用.如果一 ...

  2. Java 7之基础 - 强引用、弱引用、软引用、虚引用

    1.强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.如下: Object o=new Object();   //  强引用 当内 ...

  3. C++基础之引用与指针的区别与联系、常引用使用时应注意的问题

    什么是引用? 引用就是对变量起一个别名,而变量还是原来的变量,并没有重新定义一个变量.例如下面的例子:   #include<iostream> using namespace std; ...

  4. Java基础之引用(String,char[],Integer)总结

    1.String的引用: 下列代码执行后的结果为: public class Test { public static void main(String[] args) { StringBuffer  ...

  5. Java基础之引用(String,char[],Integer)总结于牛客网的专项练习题

    1.String的引用: 下列代码执行后的结果为: public class Test { public static void main(String[] args) { StringBuffer ...

  6. c++基础之引用reference

    1.何为引用 简单来说就是,比如你换了个新名字,用新名字叫你,你也会答应 2.引用vs指针 -引用没有null,好比你说你换了个新名字,但是新名字是啥总得有点东西 -一旦引用被初始化后就不可以指到另外 ...

  7. C++语言基础(8)-引用

    (重要)使用引用的一些注意点: 1.引用不能绑定临时数据,也不能绑定任何无法获取内存地址的常量,表达式,或值,常引用除外. 第一种写法:(错误) int func_int(){ ; return n; ...

  8. Java基础 - 强引用、弱引用、软引用、虚引用

    1.强引用(StrongReference) 强引用是使用最普遍的引用. 假设一个对象具有强引用.那垃圾回收器绝不会回收它.例如以下: [java] view plaincopyprint" ...

  9. java基础(4):引用数据类型、流程控制语句

    1. 引用数据类型 1.1 Scanner类 我们要学的Scanner类是属于引用数据类型,我们先了解下引用数据类型. 引用数据类型的使用: 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有 ...

随机推荐

  1. java removeAll和重写equals、hashcode引起的性能问题

    问题背景: 上周发现了一个spark job的执行时间从原来的10-15分钟延迟到了7个小时!wtf,这是出了什么事引起了这么大的性能问题!! 立马查看job的运行日志,发现多次运行都是在某一个固定的 ...

  2. a标签nest问题,即a标签里面嵌套a标签

    方法一:使用div模拟a,监听click事件 方法二:使用<object>标签包裹内部a标签 <div style="width: 200px;height: 200px; ...

  3. 数学:BSGS

    先来稍微回顾一下,我们已经会求模线性方程(包括其特殊情况乘法逆元) 我们还会进行幂取模的快速算法(模是质数用费马小定理,模一般情况用欧拉定理) 对于幂中指数特别大的情况,我们还延伸出了拓展欧拉定理来解 ...

  4. free命令buff和cache的区别

    [root@iz8vb8kca7twx6177bqg0fz ~]# free -h               total        used        free      shared  b ...

  5. 移动端页面使用rem布局

    阿里团队的高清布局方案代码 所谓高清方案就是根据设备屏幕的DPR(设备像素比,又称DPPX,比如dpr=2时,表示1个CSS像素由4个物理像素点组成) 动态设置 html 的font-size, 同时 ...

  6. 9.0docker的数据管理

    dopcker容器的数据卷          为容器添加数据卷 sudo docker run -v  ~/container data:/data  -it ubuntu /bin/bash   查 ...

  7. LCD实验学习笔记(九):UART

    s3c2440包含三个通用异步收发器,可工作于中断模式或DMA模式.每个UART包含两个64字节的FIFOs用于接收和发送数据.可编程设置波特率.1或2个停止位,5/6/7/8个数据位和奇偶校验状态. ...

  8. 从零开始PHP攻略(000)——关于WAMPServer集成环境

    Apache.PHP和MySQL都可以用于多种操作系统和Web服务器的组合.本篇介绍在Windows下用WampServer环境包来搭建本地php环境. W:windows A:Apache M:My ...

  9. libSVM笔记之(一)在matlab环境下安装配置libSVM

    本文为原创作品,转载请注明出处 欢迎关注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing 台湾林智仁教 ...

  10. 測試 battery capacity curve 的負載

    昨天有同事問說, 他要測試 battery capacity curve, 並且負載要使用 33mA, 於是我想到有一個 apk 名稱為 快速放電 (最下方),可以控制 cpu 的 load, 他試了 ...