C++复习 第一部分c到c++的过度
/*
#include <iostream>
using namespace std;
int aaaa;//不賦值 直接輸出它的值的時候,因為是全局變量 所以默認給了值 0,如果是局部變量 那么就是一個垃圾值
//在C中全局變量可以重復定義 后定義的覆蓋前面的 但是 C++不行 檢測機制更加嚴格
namespace A
{
?? ?int a = 1;
?? ?void print()
?? ?{
?? ??? ?cout << "namespace a" << endl;
?? ?}
}
namespace B
{
?? ?int a = 2;
?? ?void print()
?? ?{
?? ??? ?cout << "namespace b" << endl;
?? ?}
}
namespace C
{
?? ?namespace D
?? ?{
?? ??? ?struct test
?? ??? ?{
?? ??? ??? ?int x;
?? ??? ?};
?? ?}
}
void sin(void)
{
}
//此處第一個void 不可以省略!(C中可以)?
//第二個void 有沒有都代表 不允許傳參 在C中不寫void 代表可以接受任意多個形參
int main()
{
?? ?cout << "helloworld" << endl;//cout是輸出流對象 << 是重載了的符號 ?endl是換行
?? ?using namespace A;
?? ?cout << "a = " << a << endl;
?? ?cout << "a = " << B::a << endl;//聲明了用B中的a變量
?? ?using B::a;//優先級更高 但是僅僅聲明 一個B里面的變量a其余的還是用A中的(下面的print函數); ::是作用域限定符
?? ?cout << "a = " << a << endl;
?? ?print();
?? ?C::D::test t;//多重嵌套的調用
?? ?for (int z = 0; z < 3; z++)//允許了在for中定義變量
?? ?{
?? ??? ?cout << "beauty" << endl;
?? ?}
?? ?register int aa;
?? ?cout << "a的地址是 " << &aa << endl;//這時候給的地址是在內存中隨機分配的一個地址
?? ?//因為本來寄存器變量是不存在地址的?
?? ?//但是G++默認這種取地址行為是可以的 所以自動給你分配了一個內存地址
?? ?int a1 = 1, b1 = 2;
?? ?(a1 > b1) ? a1 : b1 = 10;
?? ?//作為一個三目運算符 在C++中的運算結果 返回的是變量 b1
?? ?//所以可以對其賦值
?? ?cout << "b1 = " << b1 << endl;
?? ?//但是在C中三目運算符 運算結果 返回的是 數值常量 2,所以不可以進行賦值
?? ?cin.get();//等待一個輸入再退出程序 也可以用system("pause"); 多+一個 #include <windows>
?? ?return 0;
}
*/
/*
//有關const
#include <iostream>
using namespace std;
int main()
{
?? ?const int a = 1;//這里的a = 1 存在符號表中(恒定不變的對應關系)
?? ?int *p = (int *)&a;// 這里取地址a 再取值 是將 a對應的值:1 賦值給 p
//a本身沒有地址 強行取地址系統就給它分配了一個地址 讓p指向這個地址 而已
? *p = 3;//再將p中的 值:1 ?改為3
?? ?cout << "*p = " << *p << "\n a = " << a << endl;
?? ?cin.get();
?? ?return 0;
}
*/
//const 與 define 區別 :作用域不一樣
//const是局部變量 僅在函數內有效 define 是宏 該行向下都有效
/*
#include <iostream>
using namespace std;
void print()
{
?? ?const int a = 1;
?? ?#define b 1
?? ?cout << "a = " << a << endl;
?? ?cout << "b = " << b << endl;
}
int main()
{
?? ?print();
?? ?//cout << " main a = " << a << endl;//這就會報錯 因為 a是局部變量
?? ?cout << " main b = " << b << endl;
?? ?cin.get();
?? ?return 0;
}
*/
/*
//int & a = b 代表著給b取一個別名 叫做a
//例子:
#include <iostream>
using namespace std;
void swap(int *a, int *b)
{
?? ?int tem = *a;
?? ?*a = *b;
?? ?*b = tem;
}
void swap(int &x, int &y)//這里的& 在定義的過程中代表著取別名 給傳過來的a/b區別名為x/y
{
?? ?int tem = x;
?? ?x = y;
?? ?y = tem;
}
int main()
{
?? ?int a = 1, b = 2;
?? ?swap(&a, &b);
?? ?cout << " ? ? a = " << a << " ? ? ?b = " << b << endl;
?? ?swap(a, b);
?? ?cout << "別名 a = " << a << " 別名 b = " << b << endl;
?? ?cin.get();
?? ?return 0;
}
*/
/*
//研究引用是否占用空間
#include <iostream>
using namespace std;
struct test
{
?? ?int &a;
?? ?int &b;
};
struct test1
{
?? ?char &a;
?? ?char &b;
};
//這里的int & 和char &都是常指針 所以都占四個字節大小
//和 int a[10] = {0}; 中的 a 所代表的一樣 ?a 也是常指針
//a++ 是不允許的 因為 a 所代表的數組的首地址是固定的 不可以修改(a++ 等價于 a = a+1)
int main()
{
?? ?int a = 1;
?? ?char b = 'i';
?? ?int &c = a;
?? ?char &d = b;
?? ?//這里的int& char& 都是引用 代表對應的 a ,b 的數據類型 所占空間大小
?? ?cout << "sizeof(c) = " << sizeof(c) << endl;
?? ?cout << "sizeof(d) = " << sizeof(d) << endl;
?? ?cout << "sizeof(test) = " << sizeof(test) << endl;
?? ?cout << "sizeof(test1) = " << sizeof(test1) << endl;
?? ?cin.get();
?? ?return 0;
}
*/
//指針的引用
/*
#include <iostream>
#include <cstring>
#pragma warning (disable:4996)//注意:因為vs2013版本級以后不支持strcpy這個函數 unsafe加這個去除警告(error
using namespace std;
void initMemory(char *&ptr)
{
?? ?ptr = (char *)malloc(100);
}
int main()
{
?? ?char *str = NULL;
?? ?initMemory(str);
?? ?strcpy(str,"hello");
?? ?cout << "str = " << str << endl;
?? ?
?? ?cin.get();
?? ?return 0;
}
*/
//常引用的初始化相關
/*
#include <iostream>
using namespace std;
int main()
{
?? ?const int &a = 1;//可以用常量初始化常引用
?? ?//int &a = 1;//不允許用常量初始化引用
?? ?int *p = (int *)(&a);
?? ?(*p)++;
?? ?cout << "a = " << a << endl;
?? ?cin.get();
?? ?return 0;
}
*/
/*
#include <iostream>
using namespace std;
int add(int a,int b = 0,int c = 0)//默認參數 放在最后 沒有提供數值的時候 默認使用默認參數的值
{
?? ?return (a + b +c);
}
int main()
{
?? ?int result = 0;
?? ?result = add(1,2);
?? ?cout << "add( 1 , 2) = " << result << endl;
?? ?cin.get();
?? ?return 0;
}
*/
/*
#include <iostream>
using namespace std;
int add(int a, int b = 0, int c = 0, int = 0,int ?= 0)?? ??? ??? ??? ?
{
?? ?return (a + b + c);
}
//默認參數 放在最后 沒有提供數值的時候 默認使用默認參數的值
//最后兩個是占位參數 + 默認參數 方便程序員 以后修改程序
//占位參數 就是最后 ,int ,int 留給后期修改程序時 能夠添加參數 不過調用函數需要提供足量實參?
int main()
{
?? ?int result = 0;
?? ?result = add(1, 2);
?? ?cout << "add( 1 , 2) = " << result << endl;
?? ?cin.get();
?? ?return 0;
}
*/
/*
#include <iostream>
using namespace std;
int add(int a, int b)
{
?? ?return a + b;
}
float add(float a, float b)
{
?? ?return a + b;
}
int main()
{
?? ?int a = 1;
?? ?int b = 2;
?? ?float c = 1.1;
?? ?float d = 2.0;
?? ?cout << "add(a, b) = " << add(a, b) << endl;
?? ?cout << "add(c ,d) = " << add(c, d) << endl;
?? ?cin.get();
?? ?return 0;
}
*/
//函數指針指向重載函數
#include <iostream>
using namespace std;
int add(int a, int b)
{
?? ?return a + b;
}
float add(float a, float b)
{
?? ?return a + b;
}
int main()
{
?? ?int a = 1;
?? ?int b = 2;
?? ?float c = 1.1;
?? ?float d = 2.0;
?? ?cout << "add(a, b) = " << add(a, b) << endl;
?? ?cout << "add(c ,d) = " << add(c, d) << endl;
?? ?int(*p)(int, int);//函數指針指向函數add(int型的)
?? ?p = add;
?? ?p(2 , 3);
?? ?float(*q)(float, float);//同上
?? ?q = add;
?? ?q(2.1, 3.1);
?? ?cin.get();
?? ?return 0;
}
總結
以上是生活随笔為你收集整理的C++复习 第一部分c到c++的过度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eclipse下载,安装,JDk环境配置
- 下一篇: 7-19上午刷题未知点集合