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++很难,想必还有很多需要学习的地方。

 

顺便宣传一下我的微信公众号:从来不想

 

 

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