【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类是属于引用数据类型,我们先了解下引用数据类型. 引用数据类型的使用: 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有 ...
随机推荐
- android 布局文件中控件ID、name标签属性的命名包含“@”、“.”、“+”等等符号的含义
1. 在项目的根目录有个配置文件“AndroidManifest.xml”,是用来设置Activity的属性的如 <?xml version="1.0" encoding=& ...
- 更改本地hosts文件
在 C:\Windows\System32\drivers\etc 下更改 hosts 文件 127.0.0.1 www.baidu.com 这样访问 www.baidu.com 这个地址,其实是访问 ...
- [LeetCode] 17. Letter Combinations of a Phone Number ☆☆
Given a digit string, return all possible letter combinations that the number could represent. A map ...
- Android SearchView设置与用法的那点事儿
// 设置该SearchView默认是否自动缩小为图标 mSearchView.setIconifiedByDefault(false); // 为该SearchView组件设置事件监听器 mSear ...
- 【NOIP】提高组2012 同余方程
[算法]扩展欧几里德算法 [题解]学完扩欧就可以随便水了... 转化为不定方程ax-by=1. 因为1且题目保证有解,所以方程有唯一解. 紫书曰:同余方程的一个解其实指的是一个同余等价类. 所以满足x ...
- bzoj 1406 数论
首先问题的意思就是在找出n以内的所有x^2%n=1的数,那么我们可以得到(x+1)(x-1)=y*n,那么我们知道n|(x+1)(x-1),我们设n=a*b,那么我们对于任意的a,我们满足n%a==0 ...
- Select 使用不当引发的core,你应该知道的
排查一个死机问题,搞了好几天时间,最终确定原因:最终确定问题原因,在此分享一下: 第一步:常规根据core文件查看栈信息,gdb –c core xxxx 如下rip不正确,指令地址错乱,栈信息已破坏 ...
- Android开发中的各种尺度单位
px 像素(pixel),表示屏幕上一个物理像素点 不建议直接使用 px 绘制UI,因为受像素密度的影响,以 px 为单位绘制的UI在不同手机上显示的实际大小会不同 dp (用于定义控件大小) 密 ...
- Python3 xml模块的增删改查
xml数据示例 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 <data> < ...
- caffe Python API 之激活函数ReLU
import sys import os sys.path.append("/projects/caffe-ssd/python") import caffe net = caff ...