精华内容
下载资源
问答
  • 当用实例化一个的对象,编译器会根据的定义来分配相应的存储空间 。也就是说,创建对象前,一定要有完整的定义,这样编译器才能正确的计算所需空间。 那么我们来看如下代码:class dog{ dog tt; //...

    类声明:
    class dog; //类的声明

    类定义:
    class dog{ //类的定义

    };

    当用实例化一个类的对象时,编译器会根据类的定义来分配相应的存储空间
    。也就是说,在创建对象前,一定要有完整的类定义,这样编译器才能正确的计算所需空间。
    那么我们来看如下代码:

    class dog{
    dog tt; //error, ‘tt’ uses undefined class ‘dog’

    };

    上述代码中,由于dog还没有定义结束,在内部定义一个dog类型的对象时,编译器无法知道应该为tt分配多少内存空间,因此会报注释中的错误。

    我们再看下面一段代码:

    class dog{
    dog *Zhlu; //ok
    dog& SKII; //ok
    };

    在类定义时,定义指向自身类型的指针或引用作为内部成员没有问题,由于指针和引用所占存储空间大小与类型无关,所以编译器可以计算分配空间,所以正确。

    展开全文
  • 的静态数据成员 内只能声明,定义和初始化必须在类外 可以这样 class a { int aa; static int aaa; //静态数据成员声明 }; int a::aaa=10; //静态数据成员的定义和初始化
     
    类的静态数据成员在 类内只能声明,定义和初始化必须在类外
    可以这样
    class a
    {
    int aa;
    static int aaa; //静态数据成员声明
    };
    int a::aaa=10; //静态数据成员的定义和初始化
    
    
     
    展开全文
  • 命名空间是一个范畴,它包含类声明,函数声明,常量声明和模板声明等名字空间成员。本文拟讨论如何名字空间中声明自己的和函数,以及如何程序中...使用C++类时,如果用到命名空间,使用的时候需要前置声明


    定义

    命名空间是一个范畴,它包含类声明,函数声明,常量声明和模板声明等名字空间成员。本文拟讨论如何在名字空间中声明自己的类和函数,以及如何在程序中使用它们。例如:

    namespace proj_alpha
    {
    //下面是命名空间 proj_alpha 的成员
    class Spy {/*..*/};
    void encrypt (char *msg);
    const int MAX_SPIES = 8;
    }
    

    类声明

    在使用C++类的时候,常常会用到命名空间,在使用的时候一般需要前置声明。例如:

    //SpaceA header file
    #pragma once
    namespace TestA {
    	class SpaceA {
    	public:
    		SpaceA();
    		~SpaceA();
    
    		void print();
    	};
    }
    
    //SpaceA cpp file
    #include "SpaceA.h"
    using namespace TestA; //必须有前置声明
    
    SpaceA::SpaceA() {
    }
    SpaceA::~SpaceA() {
    }
    void SpaceA::print() {
    	int i = 0;
    	i++;
    }
    

    如果命名空间定义的类成员中包含其他命名空间的类,使用的时候,必须加上命名空间。例如:

    //SpaceB header file
    #pragma once
    
    //在使用之前声明一下
    namespace TestA {
    	class SpaceA;
    }
    
    namespace TestB {
    	class SpaceB {
    	public:
    		SpaceB();
    		~SpaceB();
    		void printB();
    	private:
    		TestA::SpaceA* a;//使用的时候,必须加上命名空间
    	};
    } 
    
    //SpaceB cpp file
    #include "SpaceB.h"
    #include "SpaceA.h"
    using namespace TestB;
    using namespace TestA;
    
    SpaceB::SpaceB() {
    	a = new SpaceA;
    }
    
    SpaceB::~SpaceB() {
    }
    
    void SpaceB::printB() {
    	int i = 9;
    	i++;
    	a->print();
    }
    

    主函数中定义方式:

    #include "SpaceB.h"
    using namespace TestB;
    
    int main(int argc, char *argv[]){
    
    	SpaceB b;
    	b.printB();
    }
    

    函数模板

    命名空间中定义函数模板,实例如下:

    //compare header file
    namespace compare{
    	template<class T> T max(const T* data,int size){
    		T result =data[0];
    		for(int i=1;i<size;i++)
    			if(result<data[i])
    				result=data[i];
    			return result;
    	}
    	template <class T> T min(const T* data,int size){
    		T result =data[0];
    		for(int i=1;i<size;i++)
    			if(result>data[i])
    				result=data[i];
    			return result;
    	}
    }
    

    主函数调用方式:

    #include <iostream>
    #include "compare.h"
    using compare::max;
    using compare::min;
    //可以用下面指令的代替上面的声明
    //	using namespace compare;
    using std::cout;
    using std::endl;
     
    int main(){
    	double data[]={1.2,3.3,5.4,2.6,4.7,6.8};
    	const int dataSize=sizeof data/sizeof data[0];
    	cout <<"Min double is "<<min(data ,dataSize)<<endl;
    	cout<<"Max double is "<<max(data,dataSize)<<endl;
    	return 0;
    }
    

    参考文章

    本文参考了如下几篇文章:
    C++在命名空间中声明类和成员函数
    C++在命名空间中使用函数模板
    带有命名空间的C++类的前置声明

    展开全文
  • C++命名空间中声明类成员函数

    千次阅读 2014-04-14 17:10:58
    也就是说他们使用的是第三方定义的成员(如标准库的和函数),而不是名字空间中声明自己的和函数。本文拟讨论如何名字空间中声明自己的和函数,以及如何程序中使用它们。 名字空间是一个范畴,它包含...
    来源:网络 作者:未知
    虽然很多程序员都熟悉名字空间的概念,但他们常常都是被动地使用名字空间。也就是说他们使用的是第三方定义的成员(如标准库的类和函数),而不是在名字空间中声明自己的类和函数。本文拟讨论如何在名字空间中声明自己的类和函数,以及如何在程序中使用它们。
    名字空间是一个范畴,它包含类声明,函数声明,常量声明和模板声明等名字空间成员。例如:
    namespace proj_alpha
    {
    // 下面是名字空间  proj_alpha  的成员
    class Spy {/*..*/};
    void encrypt (char *msg);
    const int MAX_SPIES = 8;
    }
    在上面的例子中,类 Spy 在一个单独的文件中实现。通常,你是在一个专门的头文件中声明一个类并在不同的源文件中独立地定义其成员函数。那么如何将名字空间成员类分离成多个源文件呢?
    下面是名为  Foo.hpp  的头文件,其中定义了一个名为 NS 的名字空间,它包含类 Foo 的声明:
    //Foo.hpp
    namespace NS
    {
    class Foo
    {
    public:
    void f();
    void g();
    };
    }//close NS
    另外,在一个单独的源文件 Foo.cpp 中,首先包含头文件 Foo.hpp 以便实现类 Foo 的成员函数 f() g()
    //Foo.cpp
    #include "Foo.hpp"
    void NS::Foo::f()
    { /*..*/ }
    void NS::Foo::g()
    { /*..*/ }
    为了使用名字空间成员,必须使用成员的全路径名,它由名字空间后跟 :: 合成原名组成。因此,类 Foo 的全路径名是 NS::Foo 。这样编译器便可以知道 NS 是一个名字空间名,头文件 Foo.hpp 必须在引用 NS 之前被包含。
    名字空间是可以扩展的。也就是说可以声明类,而且所声明的类在其它的 .cpp 文件中是相同的名字空间成员:
    //Bar.hpp
    namespace NS // 扩展  NS
    {
    class Bar
    {
    public:
    void a();
    void b();
    };
    }
    Bar.cpp 文件中:
    #include "Bar.hpp"
    void NS::Bar::a()
    {/*..*/}
    void NS::Bar::b()
    {/*..*/}
    可以看出,虽然 Foo Bar 这两个类在不同的头文件中声明,但它们都是名字空间 NS 的成员。并且编译器和链接器将这两个类看成是同一名字空间的成员。那么,如何在应用程序中使用这些类呢?
    在文件 main.cpp 中,必须要包含声明类 Foo Bar 的头文件并加上相应的名字空间引用声明 -using
    #include "Bar.hpp"
    #include "Foo.hpp"
    int main()
    {
    using NS::Bar; // 使用名字空间
    using NS::Foo; // 同上
    Bar b;
    Foo f;
    f.f();
    //...
    }
    using 声明由关键字 using 后跟名字空间成员的全路径。这样就使你在 using 声明范围内使用成员时不用再加路径。上面的例子中,可以直接使用 Foo Bar ,因为在 main() 的开始使用了 using 声明。如果没有 using 声明就必须使用全路径成员名。
    int main()
    {
    NS::Bar b; // 全路径名
    NS::Foo f; // 同上
    //?
    }
    另外,还有一种引用名字空间成员的方法是使用 using 指令:
    #include "Bar.hpp"
    #include "Foo.hpp"
    int main()
    {
    using namespace NS; // using  指令
    Bar b;
    Foo f; 
    f.f();
    //...
    }
    using 指令由关键字 “using namespace” 后跟名字空间名构成。在访问名字空间成员时它是使用最少的一种方法,原因是这种方法将所有名字空间成员注入当前的范围,从而增加了潜在的名字冲突。  <
     
    展开全文
  • C++ 静态成员变量声明和定义

    千次阅读 2018-11-04 16:45:36
    这是学习C++中的一个简单总结 静态成员变量的声明和定义的
  • C++通过及相关的封装、继承、多态和虚函数机制支持面向对象的程序设计和开发。...C++中声明(也又称)式如下:class 类名 { 访问范围说明符: 成员变量1; 成员变量2; ... 成员函数1声明; 成员函数1定义;
  • 转载自:http://www.cnblogs.com/berry/articles/1582702.html 参考:... (一)inline函数(摘自C++ Primer的第三版) 函数声明或定义中函数返回类型前加上关键字inline即把min()指定
  • namespace命名空间成员类声明

    千次阅读 2013-05-21 01:08:14
    namespace命名空间成员类声明   这其实是QT空项目的架构!! [user:test] ls class.h main.cpp pub.cpp pub.h   [user:test] cat class.h /// @file class.h /// @brief /// @author EastonWoo ///...
  • 不能在成员函数 的外部重新声明该函数

    千次阅读 多人点赞 2016-08-18 17:49:19
    VS2012错误:不能在成员函数 的外部重新声明该函数 解决:检查函数的大括号匹配
  • 中static成员变量定义和声明

    千次阅读 2014-11-26 19:25:49
    中static成员变量的定义和声明VS2010中,只能在类外定义同时赋值,在类声明。不能再声明时赋值!! #include using namespace std; class A { public: static int a; static int b; }; int A::a=1;...
  • 【C++】中静态成员声明、初始化中静态成员声明初始化静态数据成员值的改变完整例子 有参考大佬 零点零一 的文章:https://blog.csdn.net/thanklife/article/details/78476737 中静态成员声明 中的静态...
  • 类声明成员函数定义的分离

    千次阅读 2015-10-12 21:06:59
    为了实现类的隐蔽性,对类成员函数的定义一般不放在头文件中,而放在另一个文件中,即类声明和函数定义是分别放在两个文件中的。 实际上一个C++程序是由3个部分组成的:类声明头文件(后缀为.h);类实现文件(后缀...
  • 开发环境 VS2017 代码如下: CBrick* CTetrisGame::createNewBrick(int &brickindex);...错误(活动) E0392 不能在成员函数 "CTetrisGame::createNewBrick" 的外部重新声明该函数 Tetris_Game E:\Ess...
  •  当一个被多个程序使用,一般将声明(包含成员函数的声明)放在指定的头文件中,用户编程,只需将这个头文件包含进来,而不必每个使用该的程序中重复书写其声明。而成员函数的定义则另一个源文件中...
  • 相关文章 ...当调用一个对象的非静态成员函数,系统会把该对象的起始地址赋给成员函数的this指针。而静态成员函数并不属于某一对象(所有对象共有,没有this指针,不能访问本中非静态成员,有点...
  • python 静态成员声明

    千次阅读 2011-09-21 09:20:11
    1.关于定义的一些奇特之处 ... 今天Python中定义一个,很奇怪,不需要事先声明它的成员变量吗?暂时不知,先记录下来:   class Account(object):  "一个简单的"  account_type="B
  • 例如有如下,class A ...怎么声明类A的成员函数指针或成员变量指针呢?int* (A::*func_ptr) (void) = &A::func; int A::*obj_ptr = &A::mem;上面声明了指向成员函数func的函数指针,和指向成员变量mem的变量指针
  • 今天写STL中 rb_tree 的时候意外的发现一个问题:模板的模板成员函数不能在类定义外部进行特化,特化必须放在定义内,否则将报错:error C2244: “X::test”: 无法将函数定义与现有的声明匹配 经过写如下的...
  • C++——类数据成员和类成员函数

    千次阅读 2014-01-05 20:22:24
    C++——类数据成员和类成员函数 C++除了有属于对象的成员——对象成员(或实例...static数据成员声明的内部声明任何程序块之外定义(注意:不能构造函数中初始化)。 class Task { public:  //……   pri
  • C++类成员指针

    千次阅读 2019-04-21 20:46:35
    类成员指针指可以指向类的非静态成员的指针,一般情况下,一个指针指向一个对象,但是成员指针指示的是类的成员,而非类的对象。指向类的静态成员的指针和普通指针没有什么区别。 类数据成员指针 与普通指针不同的...
  • ——不必强制普通成员函数在类体中声明类普通成员函数非得在类声明了才能外边写成员函数,C++为什么非得设计成这样呢?1.如果想增加一个函数,那么同样的函数头要写两遍,这违反了信息唯一原则。造成难于维护...
  • 最近c++课程布置了第一次作业,虽然之前...本题要求根据给定的Car声明,实现其成员函数。 和函数接口定义: class Car //定义Car { //成员函数 public: void disp_welcomemsg(); //显示欢迎信息 int g...
  • C++类成员函数指针使用介绍

    万次阅读 多人点赞 2019-09-21 16:07:49
    之前写过的博客中有介绍过函数指针和指针函数的区别和简单用法(文章这里),当时的Demo非常简单,都是C语言的写法,但是当C++中直接像C那样使用类成员函数指针就会报错:reference to non-static member ...
  • 编写const成员函数,若不慎修改了数据成员,或者调用了其他非const成员函数,编译器将指出错误; 以下程序中,stack的成员函数GetCount仅用于计数,从逻辑上讲GetCount应当为const函数。 class Stack { ...
  • 静态类是不能被实例化的。调用静态类的成员(方法,变量,属性)的时候用 静态类名.成员名  的方式来调用   静态构造函数不可被直接调用,当...调用静态类成员的时候,会首先调用静态的构造函数去初始化这个静态成
  • #include using namespace std;class Time{private:int hour;int minute;int sec;public:void sl();void sc();};void Time::sl(){cin>>hour;cin>>minute;cin>>sec;...void Time::sc(){cout<<hour<<":"<<minute<<":"<<

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 574,625
精华内容 229,850
关键字:

在类的成员声明时