C++ 命名空间 引用

include <stdlib.h>

include <stdio.h>

include <iostream>

//
using namespace std;//标准的命名空间(包含很多标准的定义)
//// << : 运算符重载
//
////命名空间 类似于java中的包(归类)
//
////自定义命名空间
//namespace NSP_A{
// int a = 9;
// namespace NSP_A_SUN{
// int a = 132;
// }
// struct Teacher
// {
// int age;
// char name[20];
// };
//}
//
//namespace NSP_B{
// int a = 12;
// struct Teacher
// {
// int age;
// char name[20];
// };
//}
//void main(){
// //printf("this is C plusplus");
// cout << "this is c++" << endl;
// //使用命名空间 :: 访问符
// cout << NSP_A::a << endl;
// cout << NSP_A::NSP_A_SUN::a << endl;
// cout << NSP_B::a << endl;
// using NSP_A::Teacher;
// Teacher t;
// t.age = 10;
// using NSP_B::Teacher;
// Teacher t;
// t.age = 10;
// system("pause");
//}

//const double PI=3.14;
////圆
//class MyCircle{
// //属性 (公用权限访问修饰符)
//private:
// double r;
// double s;
// double length;
//public:
// void setR(double r){
// this->r = r;
// }
// //获取面积
// double getS(){
// return PIrr;
// }
//};
//void main(){
// MyCircle c1e;
// c1e.setR(4);
// cout << "圆的面积:" << c1e.getS() << endl;
//
// MyCircle c1;
// c1.setR(4);
//
// cout << "圆的面积:" << c1.getS() << endl;
// system("pause");
//}
//结构体
//struct MyTeacher
//{
//public:
// char name[20];
// int age;
//public:
// void say(){
// cout << this->age << "岁" << endl;
// }
//};
//void main(){
// MyTeacher t;
// t.age = 12;
// t.say();
// system("pause");
//}
//void main(){
// bool isSingle = false;
// cout << isSingle << endl;
// if (isSingle > 0){
// cout << "单身" << endl;
// }else{
// cout << "有对象" << endl;
// }
// system("pause");
//}

//引用
//void main(){
// //变量名 -门牌号(内存空间的别名 )
// int a = 10;
// //引用
// int &b = a;
// b = 20;
// cout << a << endl;
// system("pause");
//}

//指针值交换
void swap_1(int *a, int *b){
int c = 0;
c = *a;
*a = *b;
*b = c;
}

//引用值交换
void swap_2(int &a, int &b){
int c = 0;
c = a;
a = b;
b = c;
}

void main(){
int x = 10;
int y = 20;

printf("%d,%d\n", x, y);
//swap_1(&x, &y);
//a成了x的别名
swap_2(x, y);
printf("%d,%d\n", x, y);

system("pause");

}

//指针的引用替代二级指针
//struct Teacher
//{
// char* name;
// int age;
//};
//void getTeacher(Teacher **tea){
// Teacher t = (Teacher)malloc(sizeof(Teacher));
// t->age = 13;
// tea = t;
//}
////指针的引用 替代二级指针 Teacher
&tea=(Teacher p)
//void getTeacher(Teacher
&tea){
// tea = (Teacher
)malloc(sizeof(Teacher));
// tea->age = 14;
//}
//void main(){
// Teacher *tea = NULL;
// getTeacher(&tea);
// system("pause");
//}
//指针常量 常量指针
//void main(){
// //指针常量 指针的常量,不改变地址的指针,但是可以修改他的值
// int a = 13, b = 16;
// int *const p1 = &a;
// //p1 = &b;
// p1 = 4;
// //常量指针,指向常量的指针,内容不能修改
// const int p2 = &a;
// p2 = &b;
// //
p2 = 9;
// system("pause");
//}
//1.单纯给变量取别名没有任何意义,作为函数参数传递,能保证参数传递过程中不产生副本
//2.引用可以直接操作变量,指针要通过取值(
p),间接操作变量,指针的可读性差
//3.指针需要判空引用不需要,引用不可能为空。引用不可能为空
//常引用类似于java 中的final
//常引用类似于java中final
//void myprintf(const int &a){
// cout << a << endl;
//}
//void main(){
// //const int a;
// //引用必须要有值,不能为空
// //int &a = NULL;
// //常引用
// int a = 10, b = 9;
// const int &c = a;
// //字面量
// const int &d = 70;
// //c = b;
// myprintf(c);
// system("pause");
//}

//引用的大小
/*
struct Teacher{
char name[20];
int age;
};

void main(){
Teacher t;

Teacher &t1 = t;
Teacher *p = &t;

cout << sizeof(t1) << endl;
cout << sizeof(p) << endl;
system("pause");
}
*/

/*
struct Teacher{
char name[20];
int age;
};

void myprint(Teacher *t){
cout << t->name << "," << t->age << endl;
}

void myprint2(Teacher &t){
cout << t.name << "," << t.age << endl;
t.age = 21;
}

void main(){
Teacher t;

Teacher *p = NULL;
//报错,防止不报错,进行非空判断
myprint(p);

//引用不能为空,没法传进去
Teacher &t2 = NULL;
myprint2(t2);

system("pause");
}
*/

//函数默认参数
/*
void myprint(int x, int y = 9, int z = 8){
cout << x << endl;
}
//重载
void myprint(int x,bool ret){
cout << x << endl;
}

void main(){
myprint(20);

system("pause");
}
*/

//可变参数
//int...
//void func(int i, ...){
// ////可变参数指针
// //va_list args_p;
// //// 开始读取可变参数 i 是最后一个固定的参数
// //va_start(args_p, i);
// //int a = va_arg(args_p, int);
// //int b = va_arg(args_p, int);
// //char c = va_arg(args_p, char);
// //int d = va_arg(args_p, int);
// //int w = va_arg(args_p, int);
//
// //cout << a << endl;
// //cout << b << endl;
// //cout << c << endl;
// //cout << d << endl;
// //cout << w << endl;
// //va_end(args_p);
//
// //可变参数指针
// va_list args_p;
// //开始读取可变参数,i是最后一个固定参数
// va_start(args_p, i);
// int a = va_arg(args_p, int);
// char b = va_arg(args_p, char);
// int c = va_arg(args_p, int);
// cout << a << endl;
// cout << b << endl;
// cout << c << endl;
// //结束
// va_end(args_p);
//}
//void main(){
// //func(2, 4,'b',6, 6);
// func(9, 20, 'b', 30);
// system("pause");
//}

//循环读取
/*
void func(int i,...)
{
//可变参数指针
va_list args_p;
//开始读取可变参数,i是最后一个固定参数
va_start(args_p,i);
int value;
while (1){
value = va_arg(args_p,int);
if (value <= 0){
break;
}
cout << value << endl;
}

//结束
va_end(args_p);
}

void main(){
func(9, 20, 40, 30);

system("pause");
}
*/
//类 C++ 类的普遍写法

//#include"MyTeacher.h"
//void main(){
// MyTeacher t;
// t.setAge(23);
// t.setName("chengyuelxl");
// t.print();
// system("pause");
//}\

////构造函数 析构函数 拷贝构造函数
//class MyClass{
//private:
// char* name;
// int age;
//public:
// //无参构造函数 写了就会覆盖默认的构造函数
// MyClass(){
// cout << "无参构造函数s" << endl;
// }
// MyClass(char* name,int age){
// cout << "有参构造函数" << endl;
// this->name = name;
// this->age = age;
// }
// //析构函数
//};
//void main(){
// MyClass c;
// MyClass cw("chengyue",16);
// system("pause");
//}

//构造函数 析构函数 拷贝构造函数
//class MyClass{
//private:
// char* name;
// int age;
//public:
// MyClass(){
// this->name =(char)malloc(100);
// strcpy(name, "wer");
// age = 26;
// }
// //析构函数
// //当前对象被系统释放时,析构函数被执行
// //作用:善后处理
// ~MyClass(){
// cout << "析构函数s" << endl;
// free(this->name);
// }
//};
//void func(){
// MyClass m1;
//}
//void main(){
// func();
//
// system("pause");
//}
//拷贝构造函数 浅拷贝
//class MyClass{
//private:
// char
name;
// int age;
//public:
// MyClass(char* name, int age){
// cout << "有参构造函数" << endl;
// this->name = name;
// this->age = age;
// }
// //拷贝构造函数 (值拷贝)
// //默认的拷贝构造函数就是值拷贝
// MyClass(const MyClass &obj){
// this->name = obj.name;
// this->age = obj.age;
// cout << "拷贝构造函数" << endl;
// }
// void myprint(){
// cout << name << "," << age << endl;
// }
//};
//void main(){
// MyClass my("chengyue", 24);
// MyClass m2 = my;
// m2.myprint();
// system("pause");
//}

//深拷贝
/*
class Teacher{
private:
char name;
int age;
public:
Teacher(char name, int age){
int len = strlen(name);
this->name = (char
)malloc(len+1);
strcpy(this->name, name);
this->age = age;
cout << "有参构造函数" << endl;
}
~Teacher(){
cout << "析构" << endl;
//释放内存
free(this->name);
}
//深拷贝
Teacher(const Teacher &obj){
//复制name属性
int len = strlen(obj.name);
this->name = (char
)malloc(len+1);
strcpy(this->name,obj.name);
this->age = obj.age;
}
void myprint(){
cout << name << "," << age << endl;
}
};

void func(){
Teacher t1("rose", 20);

Teacher t2 = t1;
t2.myprint();
}

void main(){
func();

system("pause");
}
*/
//拷贝构造函数被调用的场景
//1.声明时赋值
//Teacher t2 = t1;
//t2.myprint();
//2.作为参数传入,实参给形参赋值
//func1(t1);
//3.作为函数返回值返回,给变量初始化赋值
//Teacher t3 = func1(t1);

//这里不会被调用
//Teacher t1 ;
//Teacher t2;
//t1 = t2;

//构造函数中属性对象的初始化列表 构造函数后:
//class Teacher
//{
//private:
// char* name;
//
//public:
// Teacher(char* name){
// this->name = name;
// cout << "Teacher 有参构造函数" << endl;
// };
// ~Teacher(){
// cout << "Teacher 析构函数" << endl;
// }
// char* getName(){
// return this->name;
// }
//};
//class Student
//{
//private:
// int id;
// //属性对象
// //Teacher t1=Teacher("miss cang");
// Teacher t1;
// Teacher t2;
// Teacher t3;
//public:
// Student(int id, char *t1_name, char *t2_name, char *t3_name)
// :t1(t1_name), t2(t2_name), t3(t3_name){
// this->id = id;
// cout << "Student 有参构造函数" << endl;
// };
// void setId(int id){
// this->id = id;
// }
// void myprint(){
// cout << t1.getName() << t2.getName() << t3.getName() << endl;
// }
// ~Student(){
// cout << "Student 析构函数" << endl;
// }
//};
//void func(){
// Student s1(13, "chang", "chan23424g", "chwerwrwange");
// //s1.setId(19);
// s1.myprint();
//}
//void main(){
// func();
// system("pause");
//}
// c++ new (delete) 内存分配
// c malloc free

//class Teacher
//{
//private:
// char* name;
//public:
// Teacher(char* name){
// this->name = name;
// cout << "Teacher 有参构造函数" << endl;
// };
// ~Teacher(){
// cout << "Teacher 析构函数" << endl;
// }
// char* getName(){
// return this->name;
// }
// void setName(char* name){
// this->name = name;
// }
//};
//void func(){
//C++ h會調用构造函數和析构函数
/Teacher t2 = new Teacher("cjhemg");
cout << t2->getName << endl;
delete(t2);
/
//C 不會調用构造函数和析构函数
//Teacher t3 = (Teacher)malloc(sizeof(Teacher));
//t3->setName("werwer");
//free(t3);
//}
//void main(){
// func();
//数组类型
/
int* p1 = (int)malloc(sizeof(int) * 10);
p1[0] = 9;
free(p1);
/

//int *p2 = new int[10];
//p2[0] = 19;
////释放数组[] 
//delete[] p2;

// system("pause");
//}
//静态的属性和函数赋值
//class Teacher
//{
//public:
// char* name;
// static int total;
//public:
// Teacher(char* name,int total){
// this->name = name;
// this->total = total;
// cout << "Teacher 有参构造函数" << endl;
// };
// ~Teacher(){
// cout << "Teacher 析构函数" << endl;
// }
// char* getName(){
// return this->name;
// }
// void setName(char* name){
// this->name = name;
// }
// //计数的静态函数
// static void count(){
// total++;
// cout << total << endl;
// }
//};
////全局的地方对静态属性初始化赋值
//int Teacher::total = 9;
//void main(){
// cout << Teacher::total << endl;
// Teacher::total++;
// cout << Teacher::total << endl;
// Teacher::count();
// system("pause");
//}
//类的大小
//class A{
//public :
// int i;
// int j;
// int K;
// static int m;
//};
//class B{
//public:
// int i;
// int j;
// int K;
// char * nba;
// /void myorintf(){
// cout << "打印" << endl;
// };
/
//};
//void main(){
// cout << sizeof(A) << endl;
// cout << sizeof(B) << endl;
// //C C++ 内存分区: 栈 堆 全局 (静态成员,全局) 常量区(字符串),程序代码区
// jvm stack , 堆, (通过对象的引用来操作堆内存中的对象),
// native method stack(本地方法栈 jni 中native方法),
// 方法区 (程序代码),程序计数器
// system("pause");
//}

// this 指针 函数是共享的 必须要有标识当前对象是谁的办法
// this 当前对象的指针
//class Teacher
//{
//private:
// char* name;
// int age;
//public:
// Teacher(char* name, int age){
// this->name = name;
// this->age = age;
// cout << "Teacher 有参构造函数" << endl;
// };
// ~Teacher(){
// cout << "Teacher 析构函数" << endl;
// }
// //常函数 修饰的是 this
// //既不能修改指针的值 也不能修改指针指向的内容
// void print() const{
// printf("%#x\n", this);
// //this->name = "werw";
// //改变this 指针的值 也不能改
// cout << this->name << "," << this->age << endl;
// }
//};
//void main(){
//
// Teacher t1("jack", 14);
// printf("%#x\n", &t1);
// const Teacher t2("tom", 14);//常量对象只能调用常量函数,
// //常函数 方式数据成员被非法访问 不能修改
//
// t1.print();
// t2.print();
//
// system("pause");
//}
//友元函数
//class A{
//private:
// int i;
//public:
// A(int i){
// this->i = i;
// }
// void myprint(){
// cout << i << endl;
// }
// //友元函数
// friend void modify_i(A* p,int a);
//};
////友元函数的实现,在友元函数中可以访问私有的属性
//void modify_i(A* p, int a){
// p->i=a;
//}
//void main(){
// A *a = new A(10);
// a->myprint();//打印输出
// modify_i(a, 20);
// a->myprint();
// system("pause");
//}
//友元类
//class A{
// //友元类 B可以访问A类中所有的私有成员
// friend class B;
//private:
// int i;
//public:
// A(int i){
// this->i = i;
// }
// void myprint(){
// cout << i << endl;
// }
//};
//class B{
//public:
// //友元类可以访问A类中的所有的成员 class.setAccessable(true)
// void accessAny(){
// a.i=30;
// }
//private:
// A a;
//};

//运算符重载
//class Point{
//public:
// int x;
// int y;
//public:
// Point(int x,int y){
// this->x = x;
// this->y = y;
// }
// void myprint(){
// cout << x << "," << y << endl;
// }
// // 重载+ 号
// Point operator+( Point &p2){
// return Point(this->x + p2.x, this->y + p2.y);
// };
// // 重载- 号
// Point operator-( Point &p2){
// return Point(this->x - p2.x, this->y - p2.y);
// };
//};
//// 重载+ 号
//Point operator+(Point &p1, Point &p2){
// return Point(p1.x + p2.x, p1.y + p2.y);
//};
//
//// 重载- 号
//Point operator-(Point &p1, Point &p2){
// return Point(p1.x - p2.x, p1.y - p2.y);
//};

//运算符的重载还是 函数的调用
//void main(){
// Point p1(12,23);
// Point p2(124,23);
// Point p3 = p1 + p2;
// p3.myprint();
// Point p4 = p1 - p2;
// p4.myprint();
// system("pause");
//}

//当属性私有时,通过友元函数完成函数的重载
class Point{
friend Point operator+(Point &p1, Point &p2);
friend Point operator-(Point &p1, Point &p2);
private:
int x;
int y;
public:
Point(int x, int y){
this->x = x;
this->y = y;
}
void myprint(){
cout << x << "," << y << endl;
}
};
// 重载+ 号
Point operator+(Point &p1, Point &p2){
return Point(p1.x + p2.x, p1.y + p2.y);
};
// 重载- 号
Point operator-(Point &p1, Point &p2){
return Point(p1.x - p2.x, p1.y - p2.y);
};
void main(){
Point p1(12, 23);
Point p2(124, 23);
Point p3 = p1 + p2;
Point p4 = p1 - p2;
p3.myprint();
p4.myprint();
system("pause");
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容