精华内容
下载资源
问答
  • c++中类的声明和实现

    千次阅读 2019-11-08 18:59:16
    (1) 当c++中类的声明和实现放在一个类中时,c++编译器会把函数当成内联函数来对待,如下面的getR函数,c++编译器就会把其当成一个内联函数。 class Circle { public: double r; double s; public: double get...

    (1) 当c++中类的声明和实现放在一个类中时,c++编译器会把函数当成内联函数来对待,如下面的getR函数,c++编译器就会把其当成一个内联函数。

    class Circle
    {
    public:
    	double r;
    	double s;
    public:
    	double getR()  
    	{ 
    		a++;
    		return r; 
    	}
    	void setR(double val) 
    	{ 
    		r = val; 
    	}
    public:
    	double getS() //增加功能时,是在修改类, 修改类中的属性或者是方法
    	{
    		 s = 3.14f*r*r;
    		 return s;
    	}
    //private:
    	int a;
    };
    

    (2)  把类的声明和实现分开,具体如下:

    头文件:

    #pragma once  //只包含一次
    /*
    #ifndef __MYTEACHER_H_  //ctrl +shift + u 变大写
    #define __MYTEACHER_H_
    */
    
    class MyTeacher
    {
    private:
    	int m_age;
    	char m_name[32];
    public:
    
    	void setAge(int age);
    	int  getAge();
    };
    
    /*
    #endif
    */

    cpp文件:

    #include "MyTeacher.h"
    
    
    void MyTeacher::setAge(int age)
    {
    	m_age = age;
    }
    int  MyTeacher::getAge()
    {
    	return m_age;
    }

    调用者函数:

    #include <iostream>
    using namespace std;
    #include "MyTeacher.h"
    
    void mainxxx()
    {
    	MyTeacher t1;
    	t1.setAge(36);
    	cout<<t1.getAge()<<endl;
    
    	cout<<"hello..."<<endl;
    	system("pause");
    	return ;
    }

    解释一下,在头文件中,#pragma once的作用。这是为了避免同一个头文件被包含多次,其只会被编译一次。表示在编译的时候, 这个文件只被包含(include)一次,这样, 可以减少整个编译过程中打开这个文件的次数。

    展开全文
  • 浅谈c++中类之间的组合关系

    千次阅读 2018-06-19 12:22:16
    一、首先我们要知道c++中类之间有哪些关系。1.继承 继承指的是一个继承另外的一个,继承的叫做子类,被继承的叫做父类。语法形式为:class A{ }; class B:public A{ }; 其中A为父类,B为子类,public ...

    一、首先我们要知道c++中类与类之间有哪些关系。

    1.继承

        继承指的是一个类继承另外的一个类继承的类叫做子类,被继承的类叫做父类。

    语法形式为:

    class A{
    };
    class B:public A{
    };
    
    其中A为父类,B为子类,public 是继承方式,具体的内容不再多说,可参考相关的c++书籍。
    
    

    2.实现

        实现讲的是c++中面向对象的“接口”,“接口”是java中的重点,在c++中的接口主要通过纯虚函数实现。

    class A{
    public:
       virtual void func();
    };
    class B:public A{
    void func(){
       }
    };
    类A中的函数func()为纯虚函数,没有函数体,在继承它的函数中写出func()的具体实现。

    3.依赖

        C++语法中,通过将一个类作为另一类方法的参数的形式实现两个类之间的依赖关系

    class A{
    };
    class B{
    public:
       void func(A a){};
    };
    
    A类型的对象作为B类中函数的参数。

    4.聚合

        在C++语法中,通过类的指针来实现聚合

    class A{
    };
    class B{
    public:
       A a[5];
    };
    

    5.关联

        C++中,通过定义其他类指针类型的成员来实现关联。

    class A{
    };
    class B{
    public:
       A *a;
    };
    


    6.组合

        组合是将一个对象(部分)放到另一个对象里(组合)。相比"聚合",组合是一种强所属关系,组合关系的两个对象往往具有相同的生命周期,被组合的对象是在组合对象创建的同时或者创建之后创建,在组合对象销毁之前销毁。一般来说被组合对象不能脱离组合对象独立存在,而且也只能属于一个组合对象在C++语法中,使用在一个类中包含另外一个类类型的成员来实现组合。

    class A{
    };
    class B{
    public:
       A a;
    };
    
    、组合的特殊情况。
    class B;
    class A{
    public:
    B b;
    };
    class B{
    public:
       A a;
    };
    

    第一行的class B 是前置声明,因为B类型还没有定义,要“告诉”编译器 B 是什么。但是,这样编译器就能编译通过了么?

    还是不行的。为什么呢?

    编译器在编译时是一字一句的编译的,我们来简单看一下他的编译过程:

    首先,它“看到”class B,知道了B是一种“类“类型。接着 是A类的定义,在定义A类时,A类中有一个B类型的变量,编译器要知道B类型是什么样的才能继续编译A,只好转去编译B(编译器要为A分配内存就要知道A占用内存空间的大小,也就是要知道B的大小),结果B中也有A的对象而A还没编译完整。编译器知道这样下去只会没完没了,所以它撂挑子不干了,返回一个编译错误就是A没有定义(好像是A,要么就是B,按理应该是A,记不清了疑问),总之会编译错误。

    那我们怎么解决这样的问题呢?

    class B;
    class A{
    publc:
    B b;
    };
    class B{
    public:
       A *a;
    };
    
    仔细观察发现将其中一个类的对象改为了指针类型,而指针类型占用的空间是确定的,这样编译器就知道的B的占用空间大小,从而可以编译A。


    展开全文
  • c++中类对象不能访问的私有成员变量  (2014-06-19 14:13:40) 转载▼ 标签:  股票 分类: C_Concept 的成员变量分三种: public protect private   1、的...

    c++中类对象不能访问类的私有成员变量

      (2014-06-19 14:13:40)
    标签: 

    股票

    分类: C_Concept

    类的成员变量分三种: public   protect  private

     

    1、类的成员函数可以访问类这三类

    2、继承类成员函数可以访问 protect  类型

    3、只有本身类的成员函数才可以访问 private 类型

     

    4、类的对象若在其他函数中是不可以访问类的 protect  private类型变量

     

     

    类其实是个模型。
    而对象就是找个这个模型制作的实体。
    比如,类是造车的图纸,对象就是找个图纸造出的汽车。
    类的成员是分级别的:protect,public,private。
    在类内部定义的函数可以访问任何一个变量,或者调用任何的类内部的函数,但是,如果被定义成private的话,对象是不能调用的,也就是对象只能调用定义为public的数据,如果你确实需要调用某个private的变量,你可以定义一个public的函数来返回这个变量,比如:
    class D
    {
    private:
    int a;
    public:
    int Getint(){return a;}
    ......
    }
    这里你的对象不能调用a的,
    也就是不能
    int b;
    D d;//假设已经写好了构造函数
    b=d.a;//这是错误的,
    但是你可以
    b=d.Getint();
    这样就可以把a的值给b了。
    所有的public的函数都可以通过
    <对象>.<函数名>
    的方式来调用

    展开全文
  • C++中类之间的关系

    千次阅读 2009-05-31 13:25:00
    C++中类之间的关系 摘要: 本文讲解面向对象C++程序设计中类之间的关系。并用UML类图描述这些关系。 关键词: 面向对象 对象 C++ UML 适用对象 对C++有一定基础的初级同学 面向对象编程的核心: 面向对象的思想...

    C++中类之间的关系

    摘要:

    本文讲解面向对象C++程序设计中类之间的关系。并用UML类图描述这些关系。

    关键词:

    面向对象 类 对象 C++ UML

    适用对象

    对C++有一定基础的初级同学

    面向对象编程的核心:类

    面向对象的思想下编程过程可以减化为:

    1. 识别和发现备选对象

    2. 给对象分配职责

    3. 确定对象之间的关系

    下面列出一些术语,如果同学位对这些术语还不太了解,那么请要求我给大家作补充说明。

    编号

    术语

    原文

    1

    Class

    2

    对象

    Object

    3

    实例

    Instance

    4

    属性

    attribute

    5

    操作(成员函数)

    operation

    6

    关系

    relationship

    7

    UML

    Unified Modeling Language

    8

    类图

    Class diagram

    类之间的关系

    关系1: 没有关系

    两个对象之间如果没有关系,那么它们是孤立的。

    clip_image002

    关系2: 关联关系 (Association)

    clip_image004

    A和B之间是关联关系;

    C与自己关联

    关系3:有方向的关联关系 (DirectedAssociation)

    关联还可以有方向性的。如下图

    clip_image006

    这种关系是关联关系的一种。

    关系4: 聚合关系(Aggregate)

    聚合关系也是关联关系的一种,这种关系能确定两个类之间的部分或整体关系。

    clip_image008

    关系5: 组合关系(composite)

    clip_image010

    组合关系也是一种部分和整体之间的关系。您能区分组合与聚合的区别吗?这个问题当作业来讨论吧。

    关系6:泛化关系(Generalization)

    clip_image012

    泛化关系就是常见的继承关系。Student.csdn.net社区中的用户可以模型化为上图。

    关系7:依赖关系(Dependency)

    clip_image014

    比如用户有一个登录的操作,用户密码在数据库在以MD5的形式存放,登录操作要用MD5类提供的decode()方法进行明码到密码的转换。

    关系8:实现(Realization)

    clip_image016

    关系9:参数化关系(Parameter)

    clip_image018

    这种关系UML中还没有定义,我暂时为它命名这Parameter关系吧。

    作业:

    1. 说说聚合与组合关系的差别。

    2. 尝试用C++代码代码描述上述关系。

    展开全文
  • C++中类的多继承

    万次阅读 多人点赞 2015-07-19 23:07:43
    c++中一个可以从多个基类派生(即可以有多个父类),这就是多继承。多继承的方式主要有两种:1. 简单版本 C会同时拥有A和B的特性(属性和方法,也就是两个的所有成员)。这种方式很简单这里就不多说,...
  • c++中类模板的成员函数都是函数模板 这句话对吗? c++中类模板的成员函数都是函数模板 这句话对吗?
  • C++中类类型的数组

    千次阅读 2018-12-29 21:00:10
    前些天看到一段以前没见过的实例化的方式,自己琢磨了一下有了自己的理解。先看看这种实例化的方式: #include<iostream> using namespace std; class A { public: static int b; int a; A(int t=2):a...
  • C++中类的(static)静态成员变量与(static)静态成员函数

    万次阅读 多人点赞 2018-08-04 11:27:28
    而在C++类中,也有静态成员变量同时还有静态成员函数,先来看看C++中静态成员变量与静态成员函数的语法: #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class ...
  • C++中类与对象的关系

    千次阅读 2017-03-26 17:02:42
    C++中(Class)可以看做C语言结构体(Struct)的升级版。结构体是一种构造类型,可以包含若干成员变量,每个成员变量的类型可以不同;可以通过结构体来定义结构体变量,每个变量拥有相同的性质。例如: #...
  • C++类中使用 -类类型- 参数

    千次阅读 2018-11-20 16:42:59
    在定义属性或者函数使用 #include &lt;iostream&gt; using namespace std; class Parent//父类 {  private:  int a;    public:  Parent(int _a):a(_a)  {  cout&lt;&lt;"Parean...
  • 偶然在记得在知乎上看到过回答,后来忘了,翻了好久浏览记录翻出来了...为什么c++ 中类内初始值不能使用圆括号初始化? 为什么 class A{public:int a(100);}; 这样不行呢 用花括号或者=就可以呢 这样设计的目的是什么
  • C++中类的声明和的实现分开

    万次阅读 2017-02-09 18:07:17
    首先我们要先创建一个项目,名为Test2(这是我的项目名字)这里不做过多的解释,使用vs应该都会创建项目(我是创建的C++的项目,所以选择Win32控制台应用程序,创建的空项目) 然后右击项目名称—添加,点击创建...
  • A有函数FunA1()调用B函数FunB1();而B的函数FunB2()又调用了A函数FunA1(); 如何才能实现这样的功能???谢谢! 在A.h和A.cc文件实现先声明B,然后用B的指针: class B //B的声明 class A() ...
  • c++中类的成员函数调用剖析

    千次阅读 2014-05-08 21:59:06
    此用一个小示例来说明c++中成员函数是怎么调用的
  • C++中类成员对象与指针的区别

    千次阅读 2017-03-29 22:46:43
    C++编程过程,在一个的数据成员是一个时,定义这个成员变量为对象还是指针是有讲究的。 在C++中, ClassTest objTest;就已经构造了对象,分配了空间 而在C#、Java, ClassTest objTest;只是声明,并没有...
  • C++中类成员函数作为回调函数

    千次阅读 2018-06-06 17:20:48
    回调函数是基于C编程的Windows SDK的技术,不是针对C++的,程序员可以将一个C函数直接作为回调函数,但是如果试图直接使用C++的成员函数作为回调函数将发生错误...这也可以理解为什么C++类的多个实例可以共享成员函...
  • C++中类所占内存空间大小

    千次阅读 2015-12-21 16:18:08
    学习虚继承知识的时候,无意发现了关于C++类所需内存的面试题,通过sizeof()计算类所需的内存字节数。当时自己就懵了, 因为学习C++的时候,就知道类在声明时是不会分配内存空间的还以为自己学习的东西出错,还来...
  • C++中类和封装的理解

    千次阅读 2018-02-21 20:32:17
    封装是将相对独立,...C++的封装的语法格式用一个简单的例子来看下class Rectangle //长方形:声明成员{public: double a,b; //长度:数据成员 double RArea(); //求面积:函数成员 double RLen(); //求周...
  • static void StaticFunc(const char* s); static void StaticSetI(Demo& d, int v);
  • 对于C++中类(class) 与结构(struct)的描述正确...A,类中的成员默认是private 的,当是可以声明为public,private 和protected,结构中定义的成员 默认的都是public; B,结构中不允许定义成员函数,当是类中可以定义成员函
  • c++中类模板与结构体模板总结

    千次阅读 2018-04-09 22:05:23
    今天刚刚编完数据结构的单链表,其中用到了模板,发现自己有许多不熟练的地方和普通的基本类型不一样的地方。所以现在记录下来,以便以后的复习与回顾。模板的定义的关键词是template1.模板的定义template&...
  • 定义一个类,类中有一个vector成员,初始化的时候发现了一个问题理解不了 ![初始化报错](https://img-ask.csdn.net/upload/201707/02/1498983894_308029.png) 使用这种初始化方式报错 ![初始化报错]...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,169,009
精华内容 467,603
关键字:

c++中的类

c++ 订阅