C++学习笔记1(结构体,命名空间,标准输入输出,引用,函数,构造函数)
2016-08-31 09:41
846 查看
1.C++是对C的增强.
C++能够调用C的代码.C是面向过程,注重如何实现算法.而C++则是面向对象,注重如何更好地使用方法.
2.结构体
在C++中,考虑到C语言到C++语言过渡的连续性,对结构体进行了扩展 ,C++的结构体可以包含函数,这样,C++的结构体也具有类的功能 ,与class不同的是,结构体包含的函数默认为public,而不是private。 struct Student{ char name[]; int age; }
3.命名空间
//命名空间为了更好地区分不同地方调用不同的变量 //命名空间中可以有结构体,也可以内嵌命名空间 //标准命名空间(包含很多标准的定义) #include <stdarg.h> //standard namespace a{ int num=1; struct Student{ char name[20]; int age; }; } namespace b{ int num=2; namespace bc{ int c = 90; } } //例如 这里的num值完全不同 void main(){ cout<<a::num<<endl; cout<<b::num<<endl; system("pause"); }
4.引用&
//引用是指变量的别名(既内存空间的别名),而指针则是变量的地址. //主要功能为:作为参数,或者返回值. int a=2; int &pre_a=a; cout<<pre_a<<endl; /** *引用和指针的区别: 1.引用必须初始化,而指针不必. 2.引用初始化后就不能改变,而指针可以随便指向. 3.引用没有 const,指针有 const,const 的指针不可变; 4.sizeof() 引用,表示引用所指向的变量(对象)所占内存的大小,而指针则为指针本身(指针地址)的大小 */ //示例: ```c 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"); } <div class="se-preview-section-delimiter"></div>
5.函数
5.1函数基本
//函数默认参数 /* 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); 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(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"); } <div class="se-preview-section-delimiter"></div>
5.2函数指针和指针函数
辨别方式就是看函数名前面的指针*号有没有被括号()包含,如果被包含就是函数指针,反之则是指针函数。一个是指针变量,一个是函数void MyFun(int x) /* 这里定义一个MyFun函数 */ { printf("%d\n", x); } typedef char *fun(int); char *func_imp(int x){ static char *name[] = { "Illegal day", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" }; return ((x > 0 && x < 8) ? name[x] : name[0]); } void main(){ //函数指针(即函数的指针): cout << "********函数指针********" << endl; //1.函数指针的声明 void(*func_p)(int); //2.将指针指向函数 进行调用 func_p = &MyFun; /* 将MyFun函数的地址赋给FunP变量 */ //3.指针函数的调用 func_p(2); cout << "********指针函数********" << endl; //指针函数(即返回类型带指针的函数): //1.声明指针 char *p;//指针, //2.fun_imp的返回值作为 p = func_imp(2); //3. cout << p << endl; /*辨别方式就是看函数名前面的指针*号有没有被括号()包含,如果被包含就是函数指针,反之则是指针函数。 * 一个是指针变量,一个是函数 */ system("pause"); } <div class="se-preview-section-delimiter"></div>
6.构造函数
//构造函数分为:无参,有惨,析构,拷贝.//在类中,初始化时,会默认调用无参构造,当有 有参构造函数时,会直接调用有参构造函数.
<div class="se-preview-section-delimiter"></div> #define _CRT_SECURE_NO_WARNINGS <div class="se-preview-section-delimiter"></div> #include"stdio.h" <div class="se-preview-section-delimiter"></div> #include <iostream> <div class="se-preview-section-delimiter"></div> #include"MyTeacher.h" using namespace std; //引用作为,参数返回值, class Teacher{ private : char* name; int age; public ://构造函数类似于java //默认调用无参构造 Teacher(){ this->name = (char*)malloc(100); //动态内存 ,需要用strcpy strcpy(name, "jack verson"); cout << "构造函数" << endl; } //代餐构造 Teacher(char* name ,int age ){ this->name = name; this->age = age; cout << "有参构造函数" << endl; } //拷贝构造函数 //指针的地址拷贝(浅拷贝) //1.被调用场景-->声明的赋值(,座位参数传入 座位返回值的,给变量初始化赋值) Teacher(const Teacher &obj){//长引用 this->name = obj.name; this->age = obj.age; cout << "拷贝构造函数" << endl; } //深拷贝需要重写析构函数 ,变为深拷贝,拷贝指针指向的内容(用malloc) // 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; } //析构函数-->当对象要被释放时 调用 作用为善后处理 //析构函数 没有参数 ~Teacher(){ cout << "析构函数" << endl; free(this->name); }; void myPrint(){ cout << name << "##" << age << endl; } }; void func(){ Teacher t1("rose", 20); Teacher t2 = t1; t2.myprint(); } void main(){ func(); system("pause"); }
相关文章推荐
- c++ 基础知识(输入输出、namespace命名空间、引用、函数重载模版、内存管理)
- C++文件头,命名空间,new和delete,内联函数,引用,函数重载,构造函数和析构函数,深拷贝和浅拷贝,explict,this指针
- C++学习笔记6--高级强制类型转换 命名空间和模块化编程 C预处理器 链接和作用域 函数模板 类模板 内联模板 容器和算法
- C++ 学习笔记(18)异常处理(noexcept说明符和noexcept运算符、构造函数的try和catch)、命名空间(using声明和using指示)、多继承(虚继承)
- c++学习笔记(返回引用的函数)
- C++ 学习笔记 1.0 : 基本语言(变量和基本类型,标准库类型,表达式,语句,函数,标准IO库)
- C++ primer第二次阅读学习笔记(第17章:用于大型程序的工具:命名空间)
- c++学习笔记(四):函数按指针调用和按引用调用
- 【菜鸟C++学习笔记】2.命名空间的作用
- C++引用数组,函数指针,函数指针数组,结构体数组等学习
- [原创]java WEB学习笔记98:Spring学习---Spring Bean配置及相关细节:如何在配置bean,Spring容器(BeanFactory,ApplicationContext),如何获取bean,属性赋值(属性注入,构造器注入),配置bean细节(字面值,包含特殊字符,引用bean,null值,集合属性list map propert),util 和p 命名空间
- C++学习笔记:高级编程:文件和流,异常处理,动态内存,命名空间
- JavaScript权威设计--命名空间,函数,闭包(简要学习笔记十二)
- VS2010 C++ 学习笔记(一) 引用 函数参数默认值 函数重载 内联inline
- C++学习笔记(13)——利用对象、引用、指针调用虚函数
- C++ Primer 学习笔记_6_标准库类型 -- 命名空间using与string类型
- C++常引用作为函数的参数学习笔记
- [C++学习笔记]--常量对象、常量成员函数和常引用
- C++基础学习笔记----第五课(动态内存分配、命名空间、强制类型转换)
- Javascript学习笔记之函数篇(六) : 作用域与命名空间