c++第二节课

来源:互联网 发布:蓝月传奇淘宝礼包 编辑:程序博客网 时间:2024/05/20 05:08

1.没有public就默认为private;

public ,private,protected 在class类里面可以出现多次

public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用

private: 只能被该类的成员函数访问,类外的其他函数则不能;

protected:只能被该类的成员函数和派生类的成员函数访问。

构造函数:C++中定义了一种特殊的初始化函数,称为构造函数;当对象被调用时,构造函数自动调用;
构造函数名字与类名相同,也没有返回类型和返回值;
对象在生成过程中通常需要初始化变量或分配动态内存,用构造函数。

构造函数的重载:参数类型,个数不同;

析构函数: 析构函数,是在对象被删除前由系统自动执行它作清理工作。
 

程序有哪些段:??????

5段:代码段(text),数据段(date),BSS,堆段(heap),栈(stack)

前三段为组成可执行的文件

代码段:二进制文件

数据段:已初始化的全局变量/静态变量,常量

BSS:未初始化的全局变量/静态变量

heap:动态分配

stack:函数参数,局部变量值,

指针只有在分配内存之后才能堆指针进行取值操作,指针操作完需要进行delete p;

析构函数的运行顺序与定义顺序相反,先定;义的最后析构,最后定义的最先析构;

malloc和new是在堆上进行操作

给数组赋值字符串需要strcpy函数,不能直接=

char arr[20]= {0};

strcpy(arr,"hello");

对于指针,可以直接把字符串赋值给他

char *ptr;

ptr = "hello"

static函数只能访问static成员;


下面程序打印为

zhou,20

dong,30

zhou,20

m_total相当于一个全局变量,不管stu1还是stu2都是公用这个m_total

static类里申明类外定义

[cpp] view plain copy
print?
  1. class Student{  
  2. private:  
  3.     char *m_name;  
  4. public:  
  5.     Student(char *name);  
  6.     void show();  
  7.     static int m_total;  
  8. };  
  9.   
  10. Student::Student(char *name)  
  11. {  
  12.     m_name = name;  
  13.       
  14. }  
  15.   
  16. void Student::show()  
  17. {  
  18.     cout<<m_name<<","<<m_total<<endl;  
  19. }  
  20.   
  21. int Student::m_total = 0;  
  22.   
  23. int main()  
  24. {  
  25.     Student stu1("zhou");  
  26.     stu1.m_total = 20;  
  27.     stu1.show();  
  28.     Student stu2("dong");  
  29.     stu2.m_total = 30;  
  30.     stu2.show();  
  31.     stu1.show();  
  32.     return 0;  
  33. }  
/*************************************/



class Student{

private:

    char*m_name;

    int id;

    float score;

public:

    void setname(char *name,)

    {

        m_name = name;

    }

    void say()

    {

        cout<<m_name<<endl;

    }

}

类里面的函数在代码段上,不再栈上所以sizeof的值是栈上变量占的长度

Student stu;

Student *ptr= new Student;

sizeof(stu) = 12;

sizeof(ptr) = 4;                       指针4个字节

sizeof(*ptr) = 12; 

sizeof(Student) = 12;

见笔记本图片




private 变量只能类里面的函数可以调用,类外面的

c++的特性:封装,继承,多态

class Student{

public:                                                                                            //没有public九默认为private

    char *m_name;

    void say()

    {

        cout<<"name = "<<m_name<<endl;

   }

};


也可以写为

class Student{

public:

    char *m_name;

    void say();

};

void Student::say()

{

   cout<<"name = "<<m_name<<endl;

}


int main()

{

    Student stu1;                                       //这是在栈上定义的;不能有()

    stu1.m_name = "zhou";

    stu1.say();


    Student *ptr = new Student();                 //这是在堆上;有无括号都行

    ptr->m_name = "dong";

    delete ptr;

}

2.

构造函数

class Carea{

private:

    int length;

    int width;

public:

    Carea(int a,int b);                        //构造函数与类名相同,没有类型和返回值

    int area();

};

                                              //这边冒号后面的复制顺序与类里面的变量定义顺序有关

                                             //如:int a = 10;

                                               Carea::Crarea(int a):width(a),length(width){}

                                              结果是length= 231223(垃圾值),width= 10

Carea::Carea(int a,int b)      //或者写成Carea::Carea(int a,int b):length(a),width(b){cout<<"width--length"<<endl;}

{                                          

    length = a;

    width = b;

    cout<<"width--length"<<endl;

}


int Carea::area()

{

    return (width * length);

}


int main()

{

    Carea are1(30,20);                                             //定义类are1的时候同时赋值

    cout<<"area = "<<are1.area<<endl;

    return 0;

}






原创粉丝点击