C++类的初步探究

论坛 期权论坛 脚本     
匿名技术用户   2021-1-3 11:52   43   0

第一篇博文,记录自己的成长

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

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

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP