day1--C++,類的引入

再此記錄自己學習的過程,如有錯誤,歡迎大家指出。
1.初步看看結構體和類在語法上的一點區別

#include <iostream>
#include <stdio.h>
/*
day1:類的引入
例子:輸出人名,年齡,職業
c:使用結構體輸出
c++:使用類的方式輸出
*/

//C
struct C_person
{
    char *name;
    int age;
    char *work;
    void (*c_printinfo)(struct C_person *c_per);//結構體內不能有函數成員,使用函數指針實現
};
void c_printinfo(struct C_person *c_per)
{
    printf("name=%s age=%d work=%s\n",c_per->name,c_per->age,c_per->work);
}

//C++
using namespace std;
class Person
{
public:
    char *name;
    int age;
    char *work;
    void cpp_printinfo() //類中可以有函數成員
    {
      cout << "name=" <<name<<" age="<<age <<" work="<<work << endl;
    }
};
int main(int argc,char **argv)
{
    //C
    struct C_person c_per={"c",16,"language",c_printinfo};//可以看到C語言的結構體還是具有一定的侷限性,沒有CPP的類靈活
    c_per.c_printinfo(&c_per);
    //C++
    Person cpp_per={"cpp",10,"language"};//Person是類   cpp_per是Person的對象
    cpp_per.cpp_printinfo();

    return 0;
}

結果
程序運行結果
2.類的訪問控制
類成員的訪問權限有三個關鍵字控制 public private protected
private 值提供類內部函數的使用
public類外的程序可以使用
protected先不說
實例1:全爲pubilc

#include <iostream>
#include <stdio.h>
/*
day1:類的引入
例子:輸出人名,年齡,職業
c++:使用類的方式輸出
目的:瞭解public 和private 的使用
*/
//C++
using namespace std;
class Person  //類成員全是public
{
public:
    char *name;
    int age;
    char *work;
public:
    void cpp_printinfo() //類中可以有函數成員
    {
      cout << "name=" <<name<<" age="<<age <<" work="<<work << endl;
    }
};
int main(int argc,char **argv)
{
    //C++
    Person cpp_per={"cpp",10,"language"};
    cpp_per.cpp_printinfo();

    return 0;
}

運行結果 正確
在這裏插入圖片描述
示例二 數據成員是private 函數成員是public

#include <iostream>
#include <stdio.h>
/*
day1:類的引入
例子:輸出人名,年齡,職業
c++:使用類的方式輸出
目的:瞭解public 和private 的使用
*/
//C++
using namespace std;
class Person  //類成員全是public
{
private:
    char *name;
    int age;
    char *work;
public:
    void cpp_printinfo() //類中可以有函數成員
    {
      cout << "name=" <<name<<" age="<<age <<" work="<<work << endl;
    }
};
int main(int argc,char **argv)
{
    //C++
    Person cpp_per={"cpp",10,"language"};
    cpp_per.cpp_printinfo();

    return 0;
}

編譯報錯
在這裏插入圖片描述修改示例二,在public下增加修改數據成員函數setname() setage() setwork()

#include <iostream>
#include <stdio.h>
/*
day1:類的引入
例子:輸出人名,年齡,職業
c++:使用類的方式輸出
目的:瞭解public 和private 的使用
*/
//C++
using namespace std;
class Person  //類成員全是public
{
private:
    char *name;
    int age;
    char *work;
public:
    void setname(char *n)
    {
        name=n;
    }
    void setage(int a)
    {
        age=a;
    }
    void setwork(char *w)
    {
        work=w;
    }
    void cpp_printinfo() //類中可以有函數成員
    {
      cout << "name=" <<name<<" age="<<age <<" work="<<work << endl;
    }
};
int main(int argc,char **argv)
{
    //C++
    Person cpp_per;
   // cpp_per.name="CPP";  在類的外部訪問私有成員報錯
    cpp_per.setname("CPP");
    cpp_per.setage(16);
    cpp_per.setwork("language");
    cpp_per.cpp_printinfo();

    return 0;
}

運行結果
在這裏插入圖片描述
三個修改函數都重新申明瞭一個形參,我們可不可以直接用name age work呢?
如下

    void setname(char *name)
    {
        name=name;//這樣是沒有意義的  雖然不報錯,但是輸出結果亂碼
    }

在這裏插入圖片描述
我們可以用this指針來解決這個問題,每個類都默認有一個this指針指向自己

    void setname(char *name)
    {
        this->name=name;///給人的感覺就是當前使用的對象的name等於這個形參的值,兩個是不一樣的
    }

運行結果正確
在這裏插入圖片描述

在類寫成員函數看起來非常臃腫,我們將函數聲明寫在類中,函數實現寫在外面用Person::函數名()表示這個函數屬於這個類

class Person  //類成員全是public
{
private:
    char *name;
    int age;
    char *work;
public:
    void setname(char *name);
    void setage(int age);
    void setwork(char *work);
    void cpp_printinfo(); //類中可以有函數成員

};

void Person::setname(char *name)
{
    this->name=name;//給人的感覺就是當前使用的對象的name等於這個形參的值,兩個是不一樣的
}
void Person::setage(int age)
{
    this->age=age;
}
void Person::setwork(char *work)
{
    this->work=work;
}
void Person::cpp_printinfo() //類中可以有函數成員
{
  cout << "name=" <<name<<" age="<<age <<" work="<<work << endl;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章