C++学习笔记1(结构体,命名空间,标准输入输出,引用,函数,构造函数)

原创 2016年08月31日 09:41:21

1.C++是对C的增强.

C++能够调用C的代码.C是面向过程,注重如何实现算法.而C++则是面向对象,注重如何更好地使用方法.

2.结构体

在C++中,考虑到C语言到C++语言过渡的连续性,对结构体进行了扩展
,C++的结构体可以包含函数,这样,C++的结构体也具有类的功能
,与class不同的是,结构体包含的函数默认为public,而不是privatestruct 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");
}
版权声明:本文为博主原创文章,未经博主允许不得转载,转载请注明出处http://blog.csdn.net/ccj659

相关文章推荐

C++学习笔记--标准输入输出

4个内建的单字节处理的流对象cin、cout、cerr和clog,4个双字节处理的流对象wcin、wcut、wcerr、wclog(wchar_t); cerr为标准错误输出流对象,默认输出设备是屏...

黑马程序员_C#面向对象(值类型和引用类型,构造函数,常量与静态成员,命名空间,索引)

四.值类型和引用类型 namespace 值类型和引用类型 {     class Program     {         static void Main(string[] args)...

Python 标准输入输出 StringIO urllib- 千月的python linux 系统管理指南学习笔记(16)

标准输入输出 import sys 这个概念不难理解,我们在 linux shell 环境下,从键盘输入字符,我们可以看成是标准输入。而系统反馈给你的信息输出在屏幕上,我们看成是标准输...

Linux学习笔记(5)(标准输入输出)

指令:基本的计算机操作,例如:加法、减法等程序:指令的集合,一般有执行属性。看作:菜谱进程:是程序的实例,是程序执行的过程。看作:按照菜谱进行做菜的过程查看进程: ps -efcat的工作原理:接受...

《C和指针》读书笔记--标准输入输出函数和基础的字符串操纵函数

时隔三年又重新拾起C语言书学习它,说起来很汗颜。这算是一种补窟窿的行为,但是这次补就一定要补好,加油~ 读了这本书的第一章学习了C语言的标准输入输出函数,下面进行以下总结: 一、gets(...

C/C++学习之路之标准输入输出

Tips:  1. 本人当初学习C/C++的记录。  2. 资源很多都是来自网上的,如有版权请及时告知!  3. 可能会有些错误。如果看到,希望能指出,以此共勉! 文件  在此之前...

C++学习笔记(1):命名空间与头文件

C++命名空间与头文件

C++学习笔记(四):构造函数

在创建某个类的对象时,由于对该对象的状态(数据)不很明确,因此需要对其进行初始化。例如,我们要在长方形中创建一个对象,或者说新建一个长方形,那么我们首先要确定它的长和宽,假如我们无法确定它的长和宽,那...

Effective C++学习笔记之“尽量使用初始化而不要在构造函数里赋值”

   在对类成员变量初始化的时候,我们很多时候没有注意到,在类构造函数的初始化列表中初始化成员变量,和在构造函数中赋值初始化成员变量的差别是很大的,不仅表现在程序的执行效率上,同时还有语法上的区别。类...

C++学习笔记49——继承中的复制构造函数与赋值操作符

1,什么时候需要定义自己的复制构造函数? 只包含类类型或内置类型数据成员、不含指针的类一般可以使用合成操作,复制、赋值或撤销这样的成员不需要特殊控制。 换言之,如果数据中有指针,为了避免浅复制,就...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++学习笔记1(结构体,命名空间,标准输入输出,引用,函数,构造函数)
举报原因:
原因补充:

(最多只允许输入30个字)