c++多文件(.c和.h)中类的调用

楼主原来是写电控程序的,最近在学习c++,发现c和c++的开发方式存在一些异同,在此做一个小结。

在c语言开发中,.h文件中放的是变量和函数的声明,楼主在写c++的时候,也想把类的声明放在.h文件中,发现不能用,必须要写全了(.h文件中包含class内的全部内容),但是这样的话.h感觉就没有什么必要,直接包含cpp文件就好了。最终楼主找到了一个个人比较满意的方法,能在多文件中使用类,在此分享给大家。

拿楼主正在做的一个小练习举例子,封装把socketapi封装成一个简单的类。

主要是一个形式的体现,就展示客户端的程序了

MySocket.h

#pragma once

class MySocket {

private:
	sockaddr_in addr_in;
	int clientfd;
public:
	MySocket(const char* addr, int post);
	bool Socket();
	bool Connect();
	int Send(const char * str);
	int Receive(char* str);
};

在.h的类中声明属性和函数,之后在.cpp中实现函数

MySocket.cpp

#include <iostream>
#include<winsock2.h> 
#include "MySocket.h"
#define DOMAIN AF_INET
#pragma comment(lib, "ws2_32.lib")
using namespace std;
MySocket::MySocket(const char *addr,int post) {
	WSADATA wsd;                       //定义WSADATA对象
	WSAStartup(MAKEWORD(2, 2), &wsd);
	memset(&addr_in, 0, sizeof(addr_in));
	addr_in.sin_family = DOMAIN;
	addr_in.sin_port = htons(post);
	addr_in.sin_addr.S_un.S_addr = inet_addr(addr);
}
bool MySocket::Socket() {
	return (this->clientfd = socket(DOMAIN, SOCK_STREAM, 0)) == -1;
}
bool MySocket::Connect() {
	return connect(this->clientfd, (const sockaddr*)&this->addr_in, sizeof(this->addr_in));
}
int MySocket::Send(const char* str) {
	return send(this->clientfd, str, strlen(str), 0);
}
int MySocket::Receive(char* str) {
	return recv(clientfd, str, sizeof(str), 0);
}

通过这种方法,把函数和属性分开,看起来很直观,用起来也很方便

猜你喜欢

转载自blog.csdn.net/qq_38830492/article/details/129360624