第一篇博文,记录自己的成长
以前有过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++很难,想必还有很多需要学习的地方。
顺便宣传一下我的微信公众号:从来不想