c++第二节课

xiaoxiao2021-02-28  97

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 ? class Student{  private:      char *m_name;  public:      Student(char *name);      void show();      static int m_total;  };    Student::Student(char *name)  {      m_name = name;        }    void Student::show()  {      cout<<m_name<<","<<m_total<<endl;  }    int Student::m_total = 0;    int main()  {      Student stu1("zhou");      stu1.m_total = 20;      stu1.show();      Student stu2("dong");      stu2.m_total = 30;      stu2.show();      stu1.show();      return 0;  }   class Student{ private: char *m_name; public: Student(char *name); void show(); static int m_total; }; Student::Student(char *name) { m_name = name; } void Student::show() { cout<<m_name<<","<<m_total<<endl; } int Student::m_total = 0; int main() { Student stu1("zhou"); stu1.m_total = 20; stu1.show(); Student stu2("dong"); stu2.m_total = 30; stu2.show(); stu1.show(); return 0; }/*************************************/

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;

}

转载请注明原文地址: https://www.6miu.com/read-81073.html

最新回复(0)