C++類的初步探究

第一篇博文,記錄自己的成長

        以前有過C/Java的編程經驗,現在要學習一些C++的東西。不同語言的語法都是相通的,不同的地方在語言自己的特性。
有人說C++是C with class  再加上STL,粗略的看了一下,決定從C++的類開始學起。
開發環境:VS2017

1、建立一個最簡單的自定義BookType類

       首先是新建一個C++工程,這部分就不說了。類的聲明放在一個頭文件裏面,具體的實現可以放在頭文件裏面也可以自定義一個cpp文件,把具體的實現放在裏面(ps C++11出來前似乎不支持在頭文件裏面實現)

using namespace std;

class BookType
{
private:
	string history;
	string nature;
	string python;

public :
	void setHistory(string history)
	{
		this->history = history;
	}
	string getHistory()
	{
		return history;
	}
	void setNature(string nature)
	{
		this->nature = nature;
	}
	void setPython(string python)
	{
		this->python = python;
	}
};

       按照Java的風格寫了一個類,可以看到,和Java的主要差別是訪問修飾符private和public,Java的風格是每個變量或者函數都要加上訪問控制符(即使不加也有默認)而C++是將訪問權限相同的放在了一起。

       另一個差別是this關鍵字,Java裏面用一個this.params=params這種形式,但是C++使用了一個指針運算符this->params=params;這種形式。

2、BookType類的聲明和使用

      C++的類和結構體本質上是一樣的,只是默認的訪問控制權限有所差別,有過C語言開發經驗的,直接用C語言的方式聲明類即可。

	BookType bookType,bookType2;
	bookType.setHistory("2008-11-26");
	bookType.setNature("Not");
	bookType.setPython("Python");
        cout << bookType.getHistory() << endl;

       運行結果

 

3、類的嵌套、構造函數、友元的初步嘗試

       爲了對類有更好的瞭解,我對上面三種方式進行了探索,同樣按照Java風格來編寫,新建了一個SalesData類。

       對於類的嵌套和構造函數,有OOP編程經驗的大概都知道,而友元是C++裏面的一個特色,作用和Java裏面的反射是相同的,都是把私有成員變量暴露給外部使用。

class SalesData
{

	friend string add(SalesData);
	friend BookType myBookType(SalesData);

private:
	string bookId;
	string bookName;
	double bookPrice;
	string myName;
	BookType bookType;

public:

	SalesData() = default;
	SalesData(const string myName)
	{
		this->myName = myName;
	}

	void setBookId(string bookId)
	{
		this->bookId = bookId;
	}
	string getBookId()
	{
		return bookId;
	}
	void setBookName(string bookName) 
	{
		this->bookName = bookName;
	}
	string getBookName()
	{
		return bookName;
	}
	void setBookPrice(double bookPrice)
	{
		this->bookPrice = bookPrice;
	}
	double getBookPrice()
	{
		return bookPrice;
	}

	void setBookType(BookType bookType)
	{
		this->bookType = bookType;
	}

	BookType getBookType()
	{
		return bookType;
	}
};


//下面定義了兩個友元函數
string add(SalesData salesData) 
{
	return salesData.bookId+salesData.bookName;
}

BookType  myBookType(SalesData salesData)
{
	return salesData.bookType;
}

       下面是主函數裏面對類進行的操作。

// ConsoleApplication2.cpp : 此文件包含 "main" 函數。程序執行將在此處開始並結束。
//

#include "pch.h"
#include <iostream>
#include "string"
#include "SalesData.h"

using namespace std;
void controlPanel();

int main()
{
	controlPanel();
}

void controlPanel()
{
	SalesData salesData;
	BookType bookType,bookType2;
	bookType.setHistory("2008-11-26");
	bookType.setNature("Not");
	bookType.setPython("Python");
	salesData.setBookId("A10086");
	salesData.setBookName("yize");
	cout << bookType.getHistory() << endl;
	cout << salesData.getBookId() << endl;
	cout << add(salesData) << endl;
	salesData.setBookType(bookType);
	cout << salesData.getBookType().getHistory() << endl;
	bookType2 = myBookType(salesData);
	cout << bookType2.getHistory();
}

運行結果

 

      可以看到,已經實現了類的嵌套等操作,用友元函數也可以暴露出類裏面的私有變量。

 

4、總結

    C++的類和Java的類很相似,很多地方只是換個寫法,換種名字,希望能快速進步,C++標準庫還沒開始學,目前只是開始入門,素聞C++很難,想必還有很多需要學習的地方。

 

順便宣傳一下我的微信公衆號:從來不想

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章