1.使用#include分离函数的定义与实现
c语言可以在xxx.h中定义函数,然后在xxx.cpp中实现函数;
在需要用到这些函数时,只要用#include引入xxx.h即可,这样就不用将所有代码全部写在一个cpp中;
将函数定义与实现分离,代码会有更好的可读性但不是必须的 ;   
 
xxx.h
struct Test
{
int x;
int y;
int z; void Init(int x,int y,int z);
void Function1();
void Function2();
void Function3();
};
 
xxx.cpp
void Test::Init(int x,int y,int z)
{
this->x = x;
this->y = y;
this->z = z;
}
void Test::Function1()
{
printf("Function1:%x\n",x);
}
void Test::Function2()
{
printf("Function2:%x\n",y);
}
void Test::Function3()
{
printf("Function3:%x\n",z);
}
特别说明:
    1】xxx.h 只是一个文件,可以是任何的后缀名,如果你愿意,可以叫xxx.exe            
    2】#include 的作用只是把里面的内容复制过来 仅此而已.            
    如:#include "abc.exe"            
    3】xxx.h 与 xxx.cpp并不要求一定同名    
 
分开写函数实现时需要告诉编译器函数属于谁的,余姚在函数名前+类名::        
 
2.访问修饰符public和private
public的意思是,这个成员哪里都可以用,不用担心被修改,所以,一旦发布成public的成员,是不能够改名字的.                            
private的意思是,这个成员只用于内部使用,不要在其他的地方使用.                            
 
总结:
    1】对外提供的函数或者变量,发布成public的 但不能随意改动.                            
    2】可能会变动的函数或者变量,定义成private的 这样编译器会在使用的时候做检测.                            
    3】只有结构体内部的函数才可以访问private的成员.                            
    4】public/private可以修饰函数也可以修饰变量.                            
 
private修饰的成员与普通的成员没有区别 只是编译器会检测.                        
private修饰的成员只有自己的其他成员才能访问 ;                       
例如:强行访问private成员struct Test            {            
private:
int x;
public:
int y;
void Init(int x,int y)
{
this->x = x;
this->y = y;
}
}; Test t;
t.Init(,); int* p = (int*)&t;
int n = *p;
int m = *(p+);
printf("%d %d\n",n,m);
3.class和struct
class关键字和struct一样也能用来定义结构;
class Base
{
int x;
int y;
}; int main(int argc, char* argv[])
{
Base base; base.x = ;
base.y = ; return ;
}
class和struct的区别:
    编译器默认class中的成员为private 而struct中的成员为public ;
 
class的继承:
class Base
{
public:
int x;
int y;
}; class Sub:Base
{
public:
int a;
int b;
}; int main(int argc, char* argv[])
{
Sub sub; sub.x = ; //无法访问
sub.y = ; //无法访问
sub.a = ;
sub.b = ; return ;
} 父类中的程序继承后变成private属性;
也就是默认:
class Sub:private Base
{
public:
int a;
int b;
};
如果不希望改变成员的属性,需要在继承时声明public:
class Sub:public Base
{
public:
int a;
int b;
};
如果父类class中的成员是private,也是能被继承的;
只是编译器不允许直接访问;
例如:强行访问父类private成员
class Base
{
public:
Base()
{
x = ;
y = ;
}
private:
int x;
int y;
}; class Sub:Base
{
public:
int a;
int b;
}; int main(int argc, char* argv[])
{
Sub sub;
sub.a = ;
sub.b = ; int* p = (int*)⊂ printf("%d\n",sizeof(sub));
printf("%d\n",*(p+));
printf("%d\n",*(p+));
printf("%d\n",*(p+));
printf("%d\n",*(p+)); return ;
}
 

随机推荐

  1. vector简单常用用法

    Vector是什么? vector翻译为向量,从某种角度来说就是一个可以变长的数组,它会根据需要自动扩充数组的容量,除此之外其是一个STL中的模板类,其 还具有一些内部的方法. Vector的使用方法 ...

  2. Yii2 基于header 实现接口版本控制

    Yii2 官方给出的方案是基于url的版本控制,但是我们的versoin放在header里面,需要通过header来进行版本控制,实现如下: 首先在基类中实现actions,actions是针对con ...

  3. 写文章 通俗易懂 悲观锁、乐观锁、可重入锁、自旋锁、偏向锁、轻量/重量级锁、读写锁、各种锁及其Java实现!

    网上关于Java中锁的话题可以说资料相当丰富,但相关内容总感觉是一大串术语的罗列,让人云里雾里,读完就忘.本文希望能为Java新人做一篇通俗易懂的整合,旨在消除对各种各样锁的术语的恐惧感,对每种锁的底 ...

  4. (二)easyUI之消息提示框

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  5. Google Drive ubuntu

    Google尚未发布用于从Ubuntu访问其drive的官方Linux客户端.然开源社区却业已开发完毕非官方之软件包‘grive-tools’. grive乃是Google Drive(在线存储服务) ...

  6. Java框架 高并发系列 1第1天:必须知道的几个概念

    https://mp.weixin.qq.com/s?__biz=MzA5MTkxMDQ4MQ==&mid=2648933019&idx=1&sn=3455877c451de9 ...

  7. scss语法格式(常用版记录)

    这篇文章是我自己在学习Scss时的笔记~   更多学习可以参照官网(链接:https://www.sass.hk/docs/) 一,Scss语法格式 1.嵌套规则   2.父选择器&(伪类嵌套 ...

  8. js大数计算之展示

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. 【转载】salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解

    salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解   建立好的数据表在数据库中查看有很多方式,本人目前采用以下两种方式查看数据表. 1.采用schem ...

  10. weblogic快速安装版的安装和使用

    weblogic 12c提供了一个225MB大小的zip包, 我们下载下来之后解压后, 到jdk的bin目录下面, 执行java -jar ORACLE_HOME=[webloigc安装jar包绝对路 ...