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++之命名空间和结构体

(1)C++的命名空间 关键字:namespace  用来定义命名空间 一个中大型软件往往由多名程序员共同开发,会使用大量的变量和函数,不可避免地会出现变量或函数的命名冲突。当所有人的代码都测试通...
  • ZH0314
  • ZH0314
  • 2017年09月13日 20:16
  • 193

C++之struct构造函数

C++之struct构造函数     在网络协议、通信控制、嵌入式系统的C/C++编程中,我们经常要传送的不是简单的字节流(char型数组),而是多种数据组合起来的一个整体,其表现形...
  • haiross
  • haiross
  • 2015年03月31日 16:53
  • 5967

c/c++中如何写结构体的 构造函数 和 重载运算符?

  悬赏分:5 - 解决时间:2006-10-21 17:02在ACM校集训时看一个牛人写过,具体没怎么看,就知道和类的效果几乎一样,觉得很悬,请给予指教,谢谢.提问者: DancingBlue - ...
  • samantha_sun
  • samantha_sun
  • 2009年02月02日 11:51
  • 1592

c++ 基础知识(输入输出、namespace命名空间、引用、函数重载模版、内存管理)

===================== 2016-8-27 ===================== 主题:     1.c++输入输出     2.namespace 命名空间  ...
  • gmq_syy
  • gmq_syy
  • 2017年03月20日 17:04
  • 242

C++语言之结构体、类、构造函数、拷贝构造函数

结构体、类、构造函数、拷贝构造函数 1、结构体 C C++ 区别: 1、定义变量时,stuct可以省略吗? 2、C++中的结构体 可以加函数原型 加了函数的好处:通过stu变量,不但...
  • feng1790291543
  • feng1790291543
  • 2016年09月27日 22:48
  • 971

通过函数完成对结构体变量的输入与输出

先看一个小程序:#include #include struct Student { int age; char name[100]; char sex; }; //声明输...
  • Dean_Deng
  • Dean_Deng
  • 2015年05月06日 11:23
  • 2144

C++结构体:默认构造函数,复制构造函数,重载=运算符

C++结构体提供了比C结构体更多的功能,如默认构造函数,复制构造函数,运算符重载,这些功能使得结构体对象能够方便的传值。 比如,我定义一个简单的结构体,然后将其作为vector元素类型,要使用的话,...
  • fu_zk
  • fu_zk
  • 2013年08月29日 17:22
  • 20297

C++中结构体中的析构函数和构造函数

在C++中除了类中可以有构造函数和析构函数外,结构体中也可以包含构造函数和析构函数,这是因为结构体和类基 本雷同,唯一区别是,类中成员变量默认为私有,而结构体中则为公有。注意,C++中的结构体是可以...
  • lieyanhaipo
  • lieyanhaipo
  • 2014年01月07日 00:04
  • 10181

C++笔记 命名空间,结构体

1 标准命名空间 在std中包含了很多标准的定义using namespace std;void main(){ //运算符重载 输出的符号 std::cout ...
  • SImple_a
  • SImple_a
  • 2017年06月19日 11:33
  • 331

C++ 如何引用结构体数组作为函数形参

最近使用VS2008编写程序时,遇到了如何引用结构体数组作为函数形参问题。 现将主要代码粘贴如下(结果如图所示),来达到传递结构体数组到函数中的目的: ////--main.cpp--///// ...
  • mile_999
  • mile_999
  • 2015年03月12日 11:06
  • 5217
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++学习笔记1(结构体,命名空间,标准输入输出,引用,函数,构造函数)
举报原因:
原因补充:

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